Dijital Para Birimi İçin Fiyat Güncelleme ve Grafik Gösterimi

Web tabanlı uygulama geliştirme araçları(PHP, ASP vb...) ile ilgili konuları buraya yazabilirsiniz.
Cevapla
habibustun
Üye
Mesajlar: 10
Kayıt: 04 Eki 2021 10:46
İletişim:

Dijital Para Birimi İçin Fiyat Güncelleme ve Grafik Gösterimi

Mesaj gönderen habibustun »

Açıklama:
Bu program, NoR dijital para biriminin günlük fiyatını rastgele belirleyip bir JSON dosyasında saklayan ve güncellenen fiyatları grafiksel olarak gösteren bir sistemdir. Programın ana özellikleri şunlardır:

Fiyat Oluşturma: NoR para biriminin fiyatı her işlemde rastgele bir şekilde, %3'lük bir artış veya azalışla güncellenir.

Devre Kesici: Günlük fiyat değişimlerinin referans fiyatına göre en fazla %20 artış veya %20 azalış yapmasına izin veren bir devre kesici mekanizması mevcuttur. Bu limitlerin dışına çıkıldığında fiyatlar devre kesici ile sınırlanır.

JSON Veri Saklama: Program, fiyatları ve zaman damgalarını nordegeri.json dosyasında saklar. Ayrıca, her yeni gün için referans fiyatı initialPrice.json dosyasına kaydedilir ve yeni gün başladığında referans fiyat güncellenir.

Grafik Gösterimi: Program, son 10 işlemdeki fiyatları ve zamanlarını bir grafik (Chart.js) ile web arayüzünde gösterir.

Kullanım Alanları:
Kripto para birimi projeleri veya sanal finans simülasyonları için fiyatlandırma algoritmalarını test etmek.
Günlük fiyat hareketlerini ve trendlerini izlemek.
Finansal simülasyonlar için limitli fiyat değişimlerine devre kesici eklemek.

-----

Kod: Tümünü seç

<?php
// Oturumu başlat
session_start();

// Fiyatları ve referans fiyatını kaydetmek için dosya yolları
$priceFilename = 'nordegeri.json';
$initialPriceFilename = 'initialPrice.json';

// Eğer dosya yoksa başlangıç verilerini oluştur ve dosyaya yaz
if (!file_exists($priceFilename)) {
    // Başlangıç fiyatı ve zaman
    $initialPrice = 0.025;
    $initialTime = date('Y-m-d H:i:s');
    
    // JSON formatında başlangıç verisi
    $initialData = [
        [
            'time' => $initialTime,
            'price' => $initialPrice
        ]
    ];
    
    // Başlangıç verisini dosyaya JSON formatında yaz
    file_put_contents($priceFilename, json_encode($initialData, JSON_PRETTY_PRINT));
}

// Eğer referans fiyat dosyası yoksa, başlangıç fiyatını yaz
if (!file_exists($initialPriceFilename)) {
    $initialPriceData = [
        'date' => date('Y-m-d'), // Gün
        'price' => 0.025         // Başlangıç fiyatı
    ];
    
    file_put_contents($initialPriceFilename, json_encode($initialPriceData, JSON_PRETTY_PRINT));
}

// Dosyadan fiyat geçmişini oku (JSON formatında)
function readPriceHistory($filename) {
    if (file_exists($filename)) {
        $jsonContent = file_get_contents($filename);
        return json_decode($jsonContent, true);  // JSON formatından diziye dönüştür
    }

    return [];
}

// Dosyadan referans fiyatını oku
function readInitialPrice($filename) {
    if (file_exists($filename)) {
        $jsonContent = file_get_contents($filename);
        return json_decode($jsonContent, true);  // JSON formatından diziye dönüştür
    }

    return [];
}

// Yeni bir güne girdiysek, referans fiyatını güncelle
function updateInitialPriceIfNewDay($initialPriceFilename, $currentPrice) {
    $initialPriceData = readInitialPrice($initialPriceFilename);
    $currentDate = date('Y-m-d');

    // Eğer gün değişmişse, yeni gün için referans fiyatını kaydet
    if ($initialPriceData['date'] !== $currentDate) {
        $initialPriceData = [
            'date' => $currentDate, // Yeni gün
            'price' => $currentPrice // Mevcut fiyatı yeni referans fiyatı olarak ayarla
        ];
        file_put_contents($initialPriceFilename, json_encode($initialPriceData, JSON_PRETTY_PRINT));
    }

    return $initialPriceData['price']; // Güncel referans fiyatını döndür
}

// Yeni fiyatı hesaplayan fonksiyon
function generateNewNoRPrice($currentPrice) {
    // Yazı tura atma - 0: düşüş, 1: yükseliş
    $flip = rand(0, 1);

    // %3'lük bir değişim aralığında rastgele bir değer üretme
    $priceChange = $currentPrice * (rand(0, 300) / 10000);  // 0 ile %3 arası rastgele bir değer

    // Yükselme veya düşme kararına göre fiyatı güncelle
    if ($flip === 1) {
        $newPrice = $currentPrice + $priceChange;
    } else {
        $newPrice = $currentPrice - $priceChange;
    }

    return round($newPrice, 4); // 4 basamaklı bir sonuç döndür
}

// Devre kesici mantığı - %20 artış ve azalış limitleri
function applyCircuitBreaker($newPrice, $initialPrice) {
    $upperLimit = $initialPrice * 1.20;  // %20 artış limiti
    $lowerLimit = $initialPrice * 0.80;  // %20 azalış limiti

    // Yeni fiyat limitlerin dışına çıkarsa devre kesici devreye girer
    if ($newPrice > $upperLimit) {
        return $upperLimit;
    } elseif ($newPrice < $lowerLimit) {
        return $lowerLimit;
    }

    return $newPrice; // Limitler içinde ise yeni fiyatı döndür
}

// Fiyat geçmişini JSON dosyasından oku
$priceHistory = readPriceHistory($priceFilename);

// En son kaydedilen fiyatı bul
$lastEntry = end($priceHistory);
$currentPrice = $lastEntry['price'];

// Referans fiyatını oku ve eğer yeni bir güne girdiysek güncelle
$initialPrice = updateInitialPriceIfNewDay($initialPriceFilename, $currentPrice);

// Yeni fiyatı hesapla
$newPrice = generateNewNoRPrice($currentPrice);

// Devre kesici kontrolünü uygula
$newPriceWithCircuitBreaker = applyCircuitBreaker($newPrice, $initialPrice);

// Zamanı al
$currentTime = date('Y-m-d H:i:s');

// Yeni fiyatı JSON dosyasına ekle
$newEntry = [
    'time' => $currentTime,
    'price' => $newPriceWithCircuitBreaker
];
$priceHistory[] = $newEntry;  // Yeni girdiyi geçmişe ekle
file_put_contents($priceFilename, json_encode($priceHistory, JSON_PRETTY_PRINT));  // JSON dosyasını güncelle

// Fiyat geçmişini yeniden oku
$priceHistory = readPriceHistory($priceFilename);

// Sadece son 10 veriyi tut (daha fazlası varsa silebilirsin)
if (count($priceHistory) > 10) {
    $priceHistory = array_slice($priceHistory, -10);
}

// Fiyatları ve zamanları ayıkla
$prices = array_column($priceHistory, 'price');
$times = array_column($priceHistory, 'time');

// Fiyat ve zamanları ekrana bas
echo "<hr>Yeni Fiyat: " . $newPriceWithCircuitBreaker . " TL\n";
echo "<hr>50,000.00 NoR = " . (50000.00 * $newPriceWithCircuitBreaker) . " TL\n";
?>

<!-- Chart.js kütüphanesini yükleyelim -->
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>

<!-- Grafiği oluşturmak için HTML div -->
<div>
    <canvas id="priceChart" width="400" height="200"></canvas>
</div>

<script>
// PHP'den gelen verileri JavaScript'e aktaralım
var prices = <?php echo json_encode($prices); ?>;
var times = <?php echo json_encode($times); ?>;

// Chart.js ile grafiği çizelim
var ctx = document.getElementById('priceChart').getContext('2d');
var priceChart = new Chart(ctx, {
    type: 'line',
    data: {
        labels: times, // X eksenine zamanları ekle
        datasets: [{
            label: 'NoR Fiyatı (TL)',
            data: prices, // Y eksenine fiyatları ekle
            borderColor: 'rgba(75, 192, 192, 1)',
            borderWidth: 2,
            fill: false
        }]
    },
    options: {
        scales: {
            x: {
                display: true,
                title: {
                    display: true,
                    text: 'Zaman'
                }
            },
            y: {
                display: true,
                title: {
                    display: true,
                    text: 'Fiyat (TL)'
                }
            }
        }
    }
});
</script>
Resim
Benim için, öğrenmek ve kendini geliştirmek önemlidir. Bu nedenle, yeni teknolojiler ve programlama dilleri hakkında araştırmalar yapmayı, okumayı ve öğrenmeyi seviyorum. Bu alandaki çalışmalarıma devam etmek istiyorum ve gelecekte de bu alanda birçok başarıya imza atmayı hedefliyorum.
Cevapla