Merhaba,
Aşağıdaki kodda ResetPeriod kısmında "Y" Yıllık ,"A" Aylık vwap hesaplaması yapmakta iken haftalık "H" periyod ayarı olarak koda ekleme yapmak istiyorum ama yapamadım.
ResetPeriod == "H"
ise me yapmalı.
V[i].Date.Week == V[i - 1].Date.Week) ben uydurdum ; ihtiyacımı anlatma amacıyla.
Kod:
//Volume Weighted Average Price Indicator Reset
var ResetPeriod = "Y";//"D" Günlük, "A" Aylık, "Y" Yıllık
var V = Sistem.GrafikVerileri;
var Fiyat = Sistem.GrafikFiyatSec("OHLC/4");
var Lot = Sistem.GrafikFiyatSec("Lot");
var Vol = Sistem.GrafikFiyatSec("Hacim");
var TotalLot = Sistem.Liste(0);
var TotalVol = Sistem.Liste(0);
var VWAP = Sistem.Liste(0);
var VWAPU = Sistem.Liste(0);
var VWAPA = Sistem.Liste(0);
var Periyot = 0;
var SVWAP = Sistem.Liste(0);
for (int i = 100; i < Sistem.BarSayisi; i++)
{
Vol[i] = Lot[i] * Fiyat[i];
if ((ResetPeriod == "D" && V[i].Date.Day == V[i - 1].Date.Day) || (ResetPeriod == "A" && V[i].Date.Month == V[i - 1].Date.Month) || (ResetPeriod == "Y" && V[i].Date.Year == V[i - 1].Date.Year))
{
TotalLot[i] = TotalLot[i - 1] + Lot[i];
TotalVol[i] = TotalVol[i - 1] + Vol[i];
Periyot = Periyot + 1;
}
else
{
TotalLot[i] = Lot[i];
TotalVol[i] = Vol[i];
Periyot = 2;
}
VWAP[i] = (float)(TotalVol[i] / TotalLot[i]);
float toplam = 0.0f;
for (int m = i - Periyot; m < i; m++)
toplam += Fiyat[m];
float ort = toplam / Periyot;
float toplam2 = 0.0f;
float StDev = 0.0f;
for (int k = i - Periyot; k < i; k++)
{
toplam2 += (float)Math.Pow(Math.Abs(Fiyat[k] - ort), 2);
StDev = (float)Math.Sqrt(toplam2 / (Periyot - 1));
}
VWAPU[i] = VWAP[i] + StDev * 2;
VWAPA[i] = VWAP[i] - StDev * 2;
}
Sistem.Cizgiler[0].Deger = VWAP; //Panel1
Sistem.Cizgiler[1].Deger = VWAPU; //Panel1
Sistem.Cizgiler[2].Deger = VWAPA; //Panel1
// Standard deviation - //en.wikipedia.org/wiki/Standard_deviation
// SMA = 1/n sum(X)
// Std = Sqrt[1/n sum{(x-sma)^2}] = Sqrt[1/n Sum(x^2)-(1/n Sum(x))^2]
Yer İmleri