@stradivarius ve @Bear_Bull yardımlarınız için teşekkürler indikatörü çalıştırdım.Bir sorum daha olacak.Ortalamayı ağırlıklı olarak alabilirmiyiz?
|
|
Kod:var V = Sistem.GrafikVerileri ; var C = Sistem.GrafikFiyatOku(V, "Kapanis") ; var H = Sistem.GrafikFiyatOku(V, "Yuksek") ; var L = Sistem.GrafikFiyatOku(V, "Dusuk") ; var Bars = V.Count; var a = Sistem.MA(C,"Exp",20); var b = Sistem.MA(C,"Exp",100); var k = Sistem.Liste(0); for (int i = 100; i < Bars ; i++) { k[i] = (a[i]-b[i]) / (a[i]+b[i]) ; } var m =Sistem.MA(k,"Exp",8); Sistem.Cizgiler[0].Deger = k; Sistem.Cizgiler[0].Aciklama="voli"; Sistem.Cizgiler[1].Deger = m; Sistem.Cizgiler[1].Aciklama="average"; Sistem.Cizgiler[2].Deger = Sistem.Liste(0); Sistem.Cizgiler[2].Aciklama="Axis";
Bear_Bull
@BearBull26
@stradivarius ve @Bear_Bull yardımlarınız için teşekkürler indikatörü çalıştırdım.Bir sorum daha olacak.Ortalamayı ağırlıklı olarak alabilirmiyiz?
Merhaba,
CCI İndicatörünün hesaplama örneğini bilen var mı.Buradaki veriler ile örneklendirebilecek olursa sevinirim.
Tarih Saat Açılış Yüksek Düşük Kapanış
17.05.2017 11:57:00 17.84 17.85 17.83 17.83
17.05.2017 11:58:00 17.83 17.84 17.83 17.84
17.05.2017 11:59:00 17.86 17.86 17.82 17.82
17.05.2017 12:00:00 17.82 17.82 17.82 17.82
17.05.2017 12:01:00 17.84 17.84 17.84 17.84
17.05.2017 12:02:00 17.83 17.83 17.83 17.83
17.05.2017 12:03:00 17.83 17.85 17.83 17.85
17.05.2017 12:04:00 17.83 17.83 17.83 17.83
17.05.2017 12:05:00 17.85 17.85 17.85 17.85
17.05.2017 12:06:00 17.84 17.85 17.83 17.85
17.05.2017 12:07:00 17.84 17.85 17.84 17.85
17.05.2017 12:08:00 17.85 17.85 17.85 17.85
17.05.2017 12:09:00 17.84 17.85 17.84 17.85
17.05.2017 12:10:00 17.86 17.86 17.85 17.85
17.05.2017 12:11:00 17.85 17.87 17.85 17.85
17.05.2017 12:12:00 17.85 17.85 17.85 17.85
17.05.2017 12:14:00 17.87 17.88 17.87 17.87
17.05.2017 12:15:00 17.87 17.88 17.86 17.86
17.05.2017 12:16:00 17.85 17.85 17.85 17.85
Bear_Bull Ustad
Bu sayfaları buldum fakat burada anlatılanları tam olarak uygulayamadım.Bu neden ile sonucu bulamadım.
Bu sayfada genel olarak CCI anlatılıyor.Benim istediğim CCI nasıl yaratılıyor.
Bu linkte formül var fakat elimdeki veriler ile CCI sonuç üretemedim.
http://teknikanalizsanati.com/cci.aspx
Merhaba CCI hesaplama ile ilgili gerçek veriler kullanılarak yapılan örneği buldum.Excel formatinda.
İlgilenen olursa link aşağıdadır.
http://stockcharts.com/school/doku.p...nnel_index_cci
Merhaba, geçmişte forumda paylaşılan csharp hesaplaması da bu şekilde.
public List<float> CCI(int Periyot, List<float> Kapanis, List<float> Yuksek, List<float> Dusuk)
{
var liste = new List<float>(new float[Kapanis.Count]);
try
{
if (Kapanis.Count > Periyot)
{
List<float> tipikfiyat = new List<float>(new float[Kapanis.Count]);
for (int i = 0; i < Kapanis.Count; i++)
tipikfiyat[i] = (Kapanis[i] + Yuksek[i] + Dusuk[i]) / 3f;
List<float> orttipikfiyat = new List<float>(MA(Periyot, tipikfiyat));
var ortsapma = new List<float>(new float[Kapanis.Count]);
for (int i = 0; i < Kapanis.Count; i++)
{
if (i >= Periyot)
{
float sapma = 0f;
for (int j = i - Periyot + 1; j <= i; j++)
sapma += Math.Abs(orttipikfiyat[i] - tipikfiyat[j]);
ortsapma[i] = sapma / Periyot;
liste[i] = (tipikfiyat[i] - orttipikfiyat[i]) / (0.015f * ortsapma[i]);
}
}
}
return liste;
}
catch { return liste; }
}
Bunlarda Lib.cs içinden çağrılabilen diğerleri:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ideal
{
public class Lib
{
public List<float> EnYuksek(List<float> Yuksek)
{
var liste = new List<float>(new float[Yuksek.Count]);
try
{
if (Yuksek.Count > 0)
{
liste[0] = Yuksek[0];
for (int i = 1; i < Yuksek.Count; i++)
{
if (Yuksek[i] > liste[i - 1]) liste[i] = Yuksek[i]; else liste[i] = liste[i - 1];
}
}
return liste;
}
catch { return liste; }
}
public List<float> EnDusuk(List<float> Dusuk)
{
var liste = new List<float>(new float[Dusuk.Count]);
try
{
if (Dusuk.Count > 0)
{
liste[0] = Dusuk[0];
for (int i = 1; i < Dusuk.Count; i++)
{
if (Dusuk[i] < liste[i - 1]) liste[i] = Dusuk[i]; else liste[i] = liste[i - 1];
}
}
return liste;
}
catch { return liste; }
}
public List<float> XBarEnYuksek(int Periyot, List<float> Yuksek)
{
var liste = new List<float>(new float[Yuksek.Count]);
try
{
if (Yuksek.Count > Periyot)
{
liste[0] = Yuksek[0];
for (int i = 1; i < Yuksek.Count; i++)
{
float maks = Yuksek[i];
if (i > Periyot)
{
for (int j = i - Periyot + 1; j < i; j++)
if (Yuksek[j] > maks) maks = Yuksek[j];
}
else if (i > 0)
{
for (int j = 0; j <= i; j++)
if (Yuksek[j] > maks) maks = Yuksek[j];
}
liste[i] = maks;
}
}
return liste;
}
catch { return liste; }
}
public List<float> XBarEnDusuk(int Periyot, List<float> Dusuk)
{
var liste = new List<float>(new float[Dusuk.Count]);
try
{
if (Dusuk.Count > Periyot)
{
liste[0] = Dusuk[0];
for (int i = 1; i < Dusuk.Count; i++)
{
float min = Dusuk[i];
if (i > Periyot)
{
for (int j = i - Periyot + 1; j < i; j++)
if (Dusuk[j] < min) min = Dusuk[j];
}
else if (i > 0)
{
for (int j = 0; j <= i; j++)
if (Dusuk[j] < min) min = Dusuk[j];
}
liste[i] = min;
}
}
return liste;
}
catch { return liste; }
}
public List<float> MA(int Periyot, List<float> Kapanis)
{
var liste = new List<float>(new float[Kapanis.Count]);
try
{
if (Kapanis.Count > Periyot)
{
liste[0] = Kapanis[0];
for (int i = 1; i < Kapanis.Count; i++)
{
if (i > Periyot)
{
liste[i] = Kapanis.Skip(i - Periyot + 1).Take(Periyot).Average();
}
else if (i > 0)
{
liste[i] = Kapanis.Take(i + 1).Average();
}
}
}
return liste;
}
catch { return liste; }
}
public List<float> EMA(int Periyot, List<float> Kapanis)
{
var liste = new List<float>(new float[Kapanis.Count]);
try
{
if (Kapanis.Count > Periyot)
{
liste[0] = Kapanis[0];
float carpan = 2f / (Periyot + 1f);
for (int i = 1; i < Kapanis.Count; i++)
{
if (i >= Periyot)
liste[i] = liste[i - 1] + carpan * (Kapanis[i] - liste[i - 1]);
else if (i > 0)
for (int j = 1; j <= i; j++)
liste[i] = liste[j - 1] + carpan * (Kapanis[j] - liste[j - 1]);
}
}
return liste;
}
catch { return liste; }
}
public List<float> DEMA(int Periyot, List<float> Kapanis)
{
var liste = new List<float>(new float[Kapanis.Count]);
try
{
if (Kapanis.Count > Periyot)
{
List<float> ema = new List<float>(EMA(Periyot, Kapanis));
List<float> ema2 = new List<float>(EMA(Periyot, ema));
liste[0] = Kapanis[0];
for (int i = 1; i < Kapanis.Count; i++)
liste[i] = 2f * ema[i] - ema2[i];
}
return liste;
}
catch { return liste; }
}
public List<float> TEMA(int Periyot, List<float> Kapanis)
{
var liste = new List<float>(new float[Kapanis.Count]);
try
{
if (Kapanis.Count > Periyot)
{
List<float> ema = new List<float>(EMA(Periyot, Kapanis));
List<float> ema2 = new List<float>(EMA(Periyot, ema));
List<float> ema3 = new List<float>(EMA(Periyot, ema2));
liste[0] = Kapanis[0];
for (int i = 1; i < Kapanis.Count; i++)
liste[i] = (3f * ema[i] - 3f * ema2[i]) + ema3[i];
}
return liste;
}
catch { return liste; }
}
public List<float> RSI(int Periyot, List<float> Kapanis)
{
var liste = new List<float>(new float[Kapanis.Count]);
try
{
if (Kapanis.Count > Periyot)
{
var kazanclar = new List<float>(new float[Kapanis.Count]);
var kayiplar = new List<float>(new float[Kapanis.Count]);
var ortkazanclar = new List<float>(new float[Kapanis.Count]);
var ortkayiplar = new List<float>(new float[Kapanis.Count]);
var RS = new List<float>(new float[Kapanis.Count]);
for (int i = 1; i < Kapanis.Count; i++)
{
float fark = Kapanis[i] - Kapanis[i - 1];
if (fark >= 0) kazanclar[i] = fark; else kayiplar[i] = Math.Abs(fark);
if (i == Periyot)
{
ortkazanclar[i] = kazanclar.Take(Periyot).Average();
ortkayiplar[i] = kayiplar.Take(Periyot).Average();
}
else if (i > Periyot)
{
ortkazanclar[i] = ((ortkazanclar[i - 1] * (Periyot - 1)) + kazanclar[i]) / Periyot;
ortkayiplar[i] = ((ortkayiplar[i - 1] * (Periyot - 1)) + kayiplar[i]) / Periyot;
}
RS[i] = ortkazanclar[i] / ortkayiplar[i];
if (float.IsNaN(RS[i])) RS[i] = 0;
if (RS[i] == 0) liste[i] = 0f; else liste[i] = 100f - (100f / (1f + RS[i]));
}
}
return liste;
}
catch { return liste; }
}
public List<float> CCI(int Periyot, List<float> Kapanis, List<float> Yuksek, List<float> Dusuk)
{
var liste = new List<float>(new float[Kapanis.Count]);
try
{
if (Kapanis.Count > Periyot)
{
List<float> tipikfiyat = new List<float>(new float[Kapanis.Count]);
for (int i = 0; i < Kapanis.Count; i++)
tipikfiyat[i] = (Kapanis[i] + Yuksek[i] + Dusuk[i]) / 3f;
List<float> orttipikfiyat = new List<float>(MA(Periyot, tipikfiyat));
var ortsapma = new List<float>(new float[Kapanis.Count]);
for (int i = 0; i < Kapanis.Count; i++)
{
if (i >= Periyot)
{
float sapma = 0f;
for (int j = i - Periyot + 1; j <= i; j++)
sapma += Math.Abs(orttipikfiyat[i] - tipikfiyat[j]);
ortsapma[i] = sapma / Periyot;
liste[i] = (tipikfiyat[i] - orttipikfiyat[i]) / (0.015f * ortsapma[i]);
}
}
}
return liste;
}
catch { return liste; }
}
public MACDCiz MACD(int KisaP, int UzunP, int SinyalP, List<float> Kapanis)
{
MACDCiz liste = new MACDCiz();
liste.MacdCiz = new List<float>(new float[Kapanis.Count]);
liste.SinyalCiz = new List<float>(new float[Kapanis.Count]);
liste.HistCiz = new List<float>(new float[Kapanis.Count]);
try
{
if (Kapanis.Count > UzunP)
{
var kisaema = EMA(KisaP, Kapanis);
var uzunema = EMA(UzunP, Kapanis);
for (int i = 0; i < Kapanis.Count; i++)
liste.MacdCiz[i] = kisaema[i] - uzunema[i];
liste.SinyalCiz = EMA(SinyalP, liste.MacdCiz);
for (int i = 0; i < Kapanis.Count; i++)
liste.HistCiz[i] = liste.MacdCiz[i] - liste.SinyalCiz[i];
}
return liste;
}
catch { return liste; }
}
public struct MACDCiz
{
public List<float> MacdCiz { get; set; }
public List<float> SinyalCiz { get; set; }
public List<float> HistCiz { get; set; }
}
public List<float> MOM(int Periyot, List<float> Kapanis)
{
var liste = new List<float>(new float[Kapanis.Count]);
try
{
if (Kapanis.Count > Periyot)
{
for (int i = 0; i < Kapanis.Count; i++)
if (i > Periyot)
liste[i] = 100f + ((Kapanis[i] - Kapanis[i - Periyot]) / Kapanis[i - Periyot]) * 100f;
}
return liste;
}
catch { return liste; }
}
public STOCiz STO(int PeriyotK, int PeriyotD, List<float> Kapanis, List<float> Yuksek, List<float> Dusuk)
{
STOCiz liste = new STOCiz();
liste.KCiz = new List<float>(new float[Kapanis.Count]);
liste.DCiz = new List<float>(new float[Kapanis.Count]);
try
{
if (Kapanis.Count > PeriyotK)
{
var Kendusuk = XBarEnDusuk(PeriyotK, Dusuk);
var Kenyuksek = XBarEnYuksek(PeriyotK, Yuksek);
for (int i = 0; i < Kapanis.Count; i++)
if (i > PeriyotK)
liste.KCiz[i] = ((Kapanis[i] - Kendusuk[i]) / (Kenyuksek[i] - Kendusuk[i])) * 100f; //fast stoK **sabit
liste.DCiz = EMA(PeriyotD, liste.KCiz); //fast stoD
//liste.KCiz = EMA(PeriyotD, liste.KCiz); //slow stoK
//liste.DCiz = MA(PeriyotD, liste.KCiz); //slow stoD
}
return liste;
}
catch { return liste; }
}
public struct STOCiz
{
public List<float> KCiz { get; set; }
public List<float> DCiz { get; set; }
}
}
}
Yer İmleri