Originally Posted by
Orhan AKDOĞAN
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