NoR Dijital Para Birimi Fiyat Güncelleme ve Grafik Gösterimi

 

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:

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

  2. 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.

  3. 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.

  4. 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.
---

<?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>

Yorumlar

Bu blogdaki popüler yayınlar

Hakkın Yolunda Birlik

Andım

Kişiliğim