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>