kurumlar dosyasını gönderecek olan var mı
Printable View
kurumlar dosyasını gönderecek olan var mı
kolay gelsin bollinber bant i alt bantı kırdıgında al üst bantı kırdıgında sat şekilde bi sorgu sistemi var mı
İyi geceler,
YuzeyselVeriOku komutu ile hisseler için bekleyen emir adetlerini görebiliyor muyum. Yoksa DerinlikVerisiOku komutunu mu kullanmam lazım.
bence derinlik gerekir
var Sembol = "VIP'VIP-X030";
var Derinlik = Sistem.DerinlikVerisiOku(Sembol);
var Alis = Derinlik.Bids[0].Price;
var ALot = Derinlik.Bids[0].Size;
var AEmir = Derinlik.Bids[0].OrderCount;
var Satis = Derinlik.Asks[0].Price;
var SLot = Derinlik.Asks[0].Size;
var SEmir = Derinlik.Asks[0].OrderCount;
diğer kademelerde lazımsa
devamını yazarsınız.
sistem olarak hazırda sizin istediğinizin tersini yapan var
al/satları ters çevirmeniz gerekir.
var Sembol = Sistem.Sembol;
var veri = Sistem.GrafikFiyatSec("Kapanis");
var SonYon = "";
//Bollinger band çiz
var sor = 20; //Sistem.Parametreler[0]; // 20 veya başka değer gir
var sor2 = 2; //Sistem.Parametreler[1]; // 2 veya başka değer gir
var bbalt = Sistem.BollingerDown("Simple", sor, sor2);
var bborta = Sistem.BollingerMid("Simple", sor, sor2);
var bbust = Sistem.BollingerUp("Simple", sor, sor2);
Sistem.Cizgiler[0].Deger = bbust;
Sistem.Cizgiler[1].Deger = bborta ;
Sistem.Cizgiler[2].Deger = bbalt;
//Bollinger band strateji altı keserse sat üstü keserse al ///////////////////
for (int i = 1; i<Sistem.BarSayisi; i++)
{
if (veri[i] > bbust[i])
{
if ( SonYon != "A")
{
Sistem.Yon[i] = "A"; // alış
SonYon = "A";
if (Sistem.SaatAraligi("09:30", "18:15")) // saatleri aralığındaysa VIOP işlemleri // 09:30 -- 17:40 hisse işlemleri
{
if (Sistem.YukariKestiyse(veri, bbust)) // alış
{
Sistem.AlgoIslem = "A";
}
// algo açıklama
if ( Sistem.BarSayisi > 0 )
{
Sistem.AlgoAciklama = veri[Sistem.BarSayisi-1].ToString("0.000") + " yön değişir " + bbalt[Sistem.BarSayisi-1].ToString("0.000");
}
}
}
}
if (veri[i] < bbalt[i])
{
if ( SonYon != "S")
{
Sistem.Yon[i] = "S"; // Satış
SonYon = "S";
if (Sistem.SaatAraligi("09:10", "18:45")) // saatleri aralığındaysa
{
///////// ALGO İLE ŞART KONTROL ET /////////////
if (Sistem.AsagiKestiyse(veri, bbalt)) // alış
{
Sistem.AlgoIslem = "S";
}
// algo açıklama
if ( Sistem.BarSayisi > 0 )
{
Sistem.AlgoAciklama = veri[Sistem.BarSayisi-1].ToString("0.000") + " yön değişir " + bbust[Sistem.BarSayisi-1].ToString("0.000");
}
}
}
}
}
Arkadaşlar... işyerimde XP yüklü.. haliyle ideal'de aracı kuruma bağlanamıyorum..
öte yandan robot işlem yapacağım bunun için kuruma bağlanmam gerekiyor...
xp kaynaklı bağlanamadığımı biliyorum.. bu konu hakkında neler yapabilirim acaba bi fikriniz var mı? WEB'den mobil 'den bağlanabilme şansım var mı?
60dklık grafikte saat 17:00 barının düşük/yüksek/kapanış gibi değerini nasıl çizdirebilirim?
PHP Code:
var Sembol = Sistem.Sembol;
var Periyot = Sistem.Periyot;
var V = Sistem.GrafikVerileri ;
var veri = Sistem.GrafikVerileriniOku(Sembol, Periyot);
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var YKS = Sistem.Liste(0);
var DSK = Sistem.Liste(0);
var Kap = Sistem.Liste(0);
var Barno = 0 ;
var barsayisi = 20;
for (int i = 1 ; i<Sistem.BarSayisi; i++)
{
if ( V[i].Date.Hour == 17) Barno = i;
YKS[i] = H[Barno];
DSK[i] = L[Barno];
Kap[i] = C[Barno];
}
Sistem.Cizgiler[0].Deger = YKS; Sistem.Cizgiler[0].Aciklama = "Yüksek ";
Sistem.Cizgiler[1].Deger = DSK;Sistem.Cizgiler[1].Aciklama = "Düsük ";
Sistem.Cizgiler[2].Deger = Kap; Sistem.Cizgiler[2].Aciklama = "Kapanış ";
https://i.hizliresim.com/M1397Q.png
Merhaba arkadaşlar herkese kolay gelsin. Robotu bağlayıp sanalda denerken aynı zamanda işlem yaptığı yerlerden işlem yönü ve fiyat bilgisi görmek için e posta gelmesini istiyorum. Kodun al sat şartlamasının yaptığı yerlere yazmaya çalıştım kodu fakat e posta gelmiyor. Acaba yanlış yere mi yazıyorum, nereyi kaçırmış olabilirim?
Kod kısmı tahmin de edebildiğiniz üzere şöyle:
// Emir Gönder
var Islem = "";
if (Miktar > 0)
{
// e posta alış bildirimi
Islem = "ALIS";
}
if (Miktar < 0)
{
// e posta satış bildirimi
Islem = "SATIS";
Sayın Bear_Bull;
elinize sağlık bende çizgiler grafik boyu çıkıyor ayarlayamadım bir türlü :(
https://i.hizliresim.com/odR8OX.png
emir blokundan sonra şu bloku kullanabilirsin
alış satış ve son fiyat ve zaman bilgisi ekledim , sen istediğini ekleyebilirsin . lisansın varsa bekleyen emirleri falan mesela.
mail ayrıntılarını nasıl dolduracağını biliyosundur, bilmiyosan forumda vardır detaylı
Kod:Sistem.MailServerAdres =
Sistem.MailServerPort = 587;
Sistem.MailKonu =" alış/satış"+ DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss.fff")+" "+ Sistem.AlisFiyat(Sembol)
+" " +Sistem.SatisFiyat(Sembol)+" "+Sistem.SonFiyat(Sembol);
Sistem.MailMetin = ""
;
Sistem.MailGonderenAdres = ;
Sistem.MailGonderenSifre = ;
Sistem.MailAliciEkle( );
Sistem.MailGonder();
Merhaba arkadaşlar herkese kolay gelsin, ben daha önce metastock kullanıyordum ideal ile çok fazla veri uyumsuzluğu var bu nedenle idealin sorgu sistemine geçmek istiyorum ancak metastock formüllerimi ideale çeviremiyorum, sebebi de şu, metastockta ref() fonksiyonu var referans fonskiyonu, örneğin ben bugünün rsi15 verisi ile bir önceki günün rsi15 ini karşılatıracak referans datayı oluşturmak istediğimde şöyle yazıyordum ref((rsi15),-1) fakat idealde ref farklı bir fonksiyon ve bu şekilde kodlarımı algılamıyor. Yerine ne yazabileceğimi de bulamadım.
Rica etsem bana sorgulama yapmak için dünün 15günlük rsi verisiyle bugünün 15günlük rsi verisini karşılaştıracak kodu nasıl yazabileceğim konusunda yardımcı olabilir misiniz?
Şimdiden çok teşekkürler.
var RSI = Sistem.RSI(15);
var dunRSI = Sistem.Ref(RSI,-1);
Sayın Bear_Bull,
Bir ufak yardım daha rica edeceğim,
Kodu ekledim ancak ref() fonksiyonu sorgu özelliğinin alt kodunu mu bozuyor acaba, idealin sitesinde sorgu kodu örneklerinde SonRSI şeklinde bir kod konmuş, bu bir önceki günkü rsi ı referans almayı sağlıyor mu? Sorgu koduna ref i eklediğim anda kodda hata vermese de sorgu komple boş dönmeye başlıyor.
var RSI = Sistem.RSI(14);
var SonRSI = RSI[Sistem.BarSayisi-1];
Yardımlarınız için teşekkürler
Sayın netkit yardımlarınız için çok teşekkürler.
Ben aslında şunu sormak istiyorum sorgu kodunda hisseler, periyot, açıklama gibi bazı sütunlar ve onlar otomatik geliyor, demek ki bir alt kodu daha var bu bölümün çünkü ben bunları kodlama sırasında tanımlamasam da geliyorlar. Ve yukarıda Sayın Bear_Bull un paylaştığı şekilde Sistem.Ref(RSI,-1); yazarak dünün 15 günlük rsi verisi ile bugünün verisini kıyaslamak istediğimde kodda bir sıkıntı gözükmezken hesaplama yaptırdığımda sorgu hiç dönmüyor.
İdeal in sitesinde örnek sorgular var orada da en son rsi ı çekmek için RSI[Sistem.BarSayisi-1]; şeklinde kod yazılmış, ben de diyorum ki acaba referans şeklinde tanımladığımız bir önceki günün 15 günlük rsi değerini bu kodu diyelim RSI[Sistem.BarSayisi-2]; yaparak çekmek mümkün mü? Çünkü ref() fonksiyonu sorguyu bozuyor herşey onu sildiğimde çalışıyor ama tabi haliyle istediğim sorgulamayı yapmıyor, bu barsayisi-1 in de tam ne olduğunu çözemedim bir önceki günün mü o günün mü verisini veriyor, kafamda deli sorular anlayacağınız yeni olunca böyle oluyor :)
Arkadaşlar merhaba, aşağıdaki kodu nasıl çalıştırıyoruz. yardımcı olabilecek var mı?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Drawing;
namespace ideal
{
public class Lib
{
public int Barsayisi { get; set; }
public string Sembol { get; set; }
public string Periyot { get; set; }
public dynamic Veriler { get; set; }
public List<float> Yuksekler { get; set; }
public List<float> Dusukler { get; set; }
public List<float> Kapanislar { get; set; }
public List<float> Acilislar { get; set; }
public List<float> Ortalamalar { get; set; }
public float SonFiyat { get; set; }
public dynamic Sistem { get; set; }
public int MakulBaslangicBari { get; set; }
public int DusenAratrendBaslangicBari { get; set; }
public int YukselenAratrendBaslangicBari { get; set; }
public List<int> ListeDiplerGenelilk { get; set; }
public List<int> ListeDiplerArdisik { get; set; }
public List<int> ListeTepelerGenelilk { get; set; }
public List<int> ListeTepelerArdisik { get; set; }
public List<int> ListeDusuklerArdisik { get; set; }
public List<int> ListeYukseklerArdisik { get; set; }
public float PeriyotCarpani { get; set; }
public float kademeBuyuklugu { get; set; }
public float yataykademecarpani { get; set; }
public float TrendTemasCarpani { get; set; } // temas varsayımı için kaç kademe
public void SistemiBaslat(dynamic sistem)
{
this.Barsayisi = sistem.BarSayisi - 1;
this.Sembol = sistem.Sembol;
this.Periyot = sistem.Periyot;
this.Veriler = sistem.GrafikVerileriniOku(Sembol, Periyot);
this.Yuksekler = sistem.GrafikFiyatOku(Veriler, "Yuksek");
this.Dusukler = sistem.GrafikFiyatOku(Veriler, "Dusuk");
this.Kapanislar = sistem.GrafikFiyatOku(Veriler, "Kapanis");
this.Acilislar = sistem.GrafikFiyatOku(Veriler, "Acilis");
this.Ortalamalar = sistem.GrafikFiyatOku(Veriler, "Ortalama");
this.SonFiyat = Kapanislar.Last();
this.Sistem = sistem;
this.MakulBaslangicBari = Kapanislar.FindIndex(x => x > 0.25f);
if (this.MakulBaslangicBari == 0) this.MakulBaslangicBari = 100;
this.ListeDiplerGenelilk = DiplerGenelilkListeOlustur();
this.ListeTepelerGenelilk = TepelerGenelilkListeOlustur();
this.ListeDiplerArdisik = ArdisikDiplerListesiOlustur(ListeDiplerGenelilk);
this.ListeTepelerArdisik = ArdisikTepelerListesiOlustur(ListeTepelerGenelilk) ;
this.ListeDusuklerArdisik = ArdisikDiplerListesiOlusturAnaliste();
this.ListeYukseklerArdisik = ArdisikTepelerListesiOlusturAnaliste();
if (Periyot == "1" || Periyot == "2" || Periyot == "3" || Periyot == "4" ) { PeriyotCarpani = 0.4f; yataykademecarpani = 2f; }
else if (Periyot == "5" || Periyot == "8" || Periyot == "10") { PeriyotCarpani = 0.5f; yataykademecarpani = 3f;}
else if (Periyot == "15" || Periyot == "20" || Periyot == "30") { PeriyotCarpani = 0.8f; yataykademecarpani = 5f;}
else if (Periyot == "60" ) { PeriyotCarpani = 1.5f; yataykademecarpani = 7f;}
else if (Periyot == "120") { PeriyotCarpani = 1.6f; yataykademecarpani = 10f;}
else if (Periyot == "240" ) { PeriyotCarpani = 2.8f; yataykademecarpani = 12f;}
else if (Periyot == "S") { PeriyotCarpani = 3f; yataykademecarpani = 15f; }
else if (Periyot == "G") { PeriyotCarpani = 3.8f; yataykademecarpani = 17f;}
else if (Periyot == "H" ) { PeriyotCarpani = 4.5f; yataykademecarpani = 25f;}
else if (Periyot == "A" ) { PeriyotCarpani = 1.5f; yataykademecarpani = 30f;}
else { PeriyotCarpani = 1f; yataykademecarpani = 40f; }
if (SonFiyat > 0f && SonFiyat < 0.9f) { kademeBuyuklugu = 0.01f ; TrendTemasCarpani = 0.0125f ; }
else if (SonFiyat >= 0.9f && SonFiyat < 1.5f) { kademeBuyuklugu = 0.01f; TrendTemasCarpani = 0.4f; }
else if (SonFiyat >=1.5f && SonFiyat < 5f) { kademeBuyuklugu = 0.01f ; TrendTemasCarpani = 0.5f ; }
else if (SonFiyat >= 5f && SonFiyat < 7f) { kademeBuyuklugu = 0.01f ; TrendTemasCarpani = 0.5f ; }
else if (SonFiyat >= 7f && SonFiyat < 15f ) { kademeBuyuklugu = 0.01f ; TrendTemasCarpani = 1.01f ; }
else if (SonFiyat >= 15f && SonFiyat < 20f) { kademeBuyuklugu = 0.01f ; TrendTemasCarpani = 1.05f ; }
else if (SonFiyat >= 20f && SonFiyat < 30f) { kademeBuyuklugu = 0.02f ; TrendTemasCarpani = 1.1f ; }
else if (SonFiyat >= 30f && SonFiyat < 50f) { kademeBuyuklugu = 0.02f ; TrendTemasCarpani = 1.2f ; }
else if (SonFiyat >= 50f && SonFiyat < 100f) { kademeBuyuklugu = 0.05f ; TrendTemasCarpani = 1.2f ; }
else if (SonFiyat >= 100f && SonFiyat < 200f) { kademeBuyuklugu = 0.010f ; TrendTemasCarpani = 1.1f ; }
else if (SonFiyat >= 200f && SonFiyat < 500f) { kademeBuyuklugu = 0.010f ; TrendTemasCarpani = 1.5f ; }
else if (SonFiyat >= 500f && SonFiyat < 1000f) { kademeBuyuklugu = 0.010f ; TrendTemasCarpani = 2f ; }
else if (SonFiyat >= 50000f && SonFiyat < 20000f) { kademeBuyuklugu = 20f; TrendTemasCarpani = 1f; }
else { kademeBuyuklugu = 20f ; TrendTemasCarpani = 1f ; }
var Renk = Sistem.Renk(255, 255, 0, 80);
Sistem.ZeminYazisiEkle("hisseanaliz.net", 1, 800, 80, Renk, "Tahoma", 13);
}
public void BarNoktalariTest()
{
var mavi = Color.DarkBlue; var kirmizi = Color.Red; var yesil = Color.DarkGreen; var acikkirmizi = Color.IndianRed;
//foreach (var d in ListeDiplerGenelilk) { Sistem.YaziEkle("ʌ", 1, d, Dusukler[d], kirmizi, "Arial", 12); }
//foreach (var t in ListeTepelerGenelilk) { Sistem.YaziEkle("v", 1, t, (Yuksekler[t] + (Yuksekler[t] / 800)), kirmizi, "Arial", 12); }
foreach (var d in ListeDiplerArdisik) { Sistem.YaziEkle("ʌ", 1, d, Dusukler[d], yesil, "Arial", 20); }
foreach (var d in ListeTepelerArdisik) { Sistem.YaziEkle("v", 1, d, (Yuksekler[d] + (Yuksekler[d] / 800)), mavi, "Arial", 20); }
}
public void AnatrendleriCiz()
{
var mavi = Color.DarkBlue; var kirmizi = Color.Red; var yesil = Color.DarkGreen; var acikkirmizi = Color.IndianRed;
var kullanilacakdipliste = ListeDiplerArdisik; // ListeDiplerArdisik --> ListeDusuklerArdisik değişimi yapılabilir.
var Yukselentrendlistesi = new List<Trend>();
var baslangicDipBarReferans = kullanilacakdipliste.Count - 1;
var dipreferanslar = new List<int>();
var SonRefarnsBarNo = 0;
var sayacyukselen = 1;
while ( SonRefarnsBarNo < (Barsayisi-40))
{
if (baslangicDipBarReferans == 0) break;
sayacyukselen++;
for (int i = baslangicDipBarReferans; i > 0; i--)
{
var trend = new Trend();
trend.trend = IkiBarArasiTrendOlustur(kullanilacakdipliste[baslangicDipBarReferans], kullanilacakdipliste[i - 1], "Low");
trend = TrendDegerlemeYukselen(trend.trend, Barsayisi-5);
if (trend.AsagiSarkmalar < 1 && trend.TemasSayisi > 0 && trend.sontemasbari < Barsayisi - 40)
{ Yukselentrendlistesi.Add(trend); SonRefarnsBarNo = kullanilacakdipliste[i - 1];
dipreferanslar.Add(trend.sontemasbari); baslangicDipBarReferans = i - 1;
break; }
if(i == 1 && Yukselentrendlistesi.Count==0) { baslangicDipBarReferans = kullanilacakdipliste.Count-sayacyukselen; break; }
if (i == 1 ) { SonRefarnsBarNo = Barsayisi; break; }
}
}
if(dipreferanslar.Count > 0 ) { YukselenAratrendBaslangicBari = dipreferanslar.Last(); }
else { YukselenAratrendBaslangicBari = kullanilacakdipliste.Last(); }
//Sistem.YaziEkle("X", 1, YukselenAratrendBaslangicBari, Dusukler[YukselenAratrendBaslangicBari], mavi, "Arial", 10);
var yukselentrendlersayisi = Yukselentrendlistesi.Count;
if (yukselentrendlersayisi>0) SistemCizgileriniCiz(Yukselentrendlistesi[yukselentrendlersayisi-1].trend, 1, mavi, kalinlik: 2);
if (yukselentrendlersayisi > 1) { SistemCizgileriniCiz(Yukselentrendlistesi[yukselentrendlersayisi-1].trend, 1, yesil, kalinlik: 2); SistemCizgileriniCiz(Yukselentrendlistesi[yukselentrendlersayisi - 2].trend, 2, mavi, kalinlik: 2); }
//////////
var Dusentrendlistesi = new List<Trend>();
var kullanilacaktepeliste = ListeTepelerArdisik; // ListeYukseklerArdisik--> ListeTepelerArdisik değişimi yapılabilir.
var baslangicTepeBarReferans = kullanilacaktepeliste.Count - 1;
var tepereferanslar = new List<int>();
var SonRefarnsBarNo2 = 0;
var sayacdusen = 1;
while (SonRefarnsBarNo2 < (Barsayisi - 40))
{
if (baslangicTepeBarReferans == 0) break;
sayacdusen++;
for (int i = baslangicTepeBarReferans; i > 0; i--)
{
var trend = new Trend();
trend.trend = IkiBarArasiTrendOlustur(kullanilacaktepeliste[baslangicTepeBarReferans], kullanilacaktepeliste[i - 1], "High");
trend = TrendDegerlemeDusen(trend.trend, Barsayisi-5);
if (trend.YukariSarkmalar < 1 && trend.TemasSayisi > 0 && trend.sontemasbari < Barsayisi- 40 )
{ Dusentrendlistesi.Add(trend); SonRefarnsBarNo2 = kullanilacaktepeliste[i - 1]; tepereferanslar.Add(trend.sontemasbari);
baslangicTepeBarReferans = i - 1; break; }
if (i == 1 && Dusentrendlistesi.Count == 0) { baslangicTepeBarReferans = kullanilacaktepeliste.Count- sayacdusen; break; }
if ( i == 1 ) { SonRefarnsBarNo2 = Barsayisi; break; }
}
}
if (tepereferanslar.Count > 0) { DusenAratrendBaslangicBari = tepereferanslar.Last(); }
else { DusenAratrendBaslangicBari = kullanilacaktepeliste.Last(); }
//Sistem.YaziEkle("X", 1, DusenAratrendBaslangicBari, (Yuksekler[DusenAratrendBaslangicBari] + (Yuksekler[DusenAratrendBaslangicBari] / 800)), yesil, "Arial", 10);
var dusentrendlersayisi = Dusentrendlistesi.Count;
if (dusentrendlersayisi > 0) SistemCizgileriniCiz(Dusentrendlistesi[dusentrendlersayisi - 1].trend, 3, mavi, kalinlik: 2);
if (dusentrendlersayisi > 1) { SistemCizgileriniCiz(Dusentrendlistesi[dusentrendlersayisi - 1].trend, 3, yesil, kalinlik: 2); SistemCizgileriniCiz(Dusentrendlistesi[dusentrendlersayisi - 2].trend, 4, mavi, kalinlik: 2); }
}
public void AraTerndleriCiz()
{
var mavi = Color.DarkBlue; var kirmizi = Color.Red; var yesil = Color.DarkGreen; var acikkirmizi = Color.IndianRed;
var aradusenliste = new List<Trend>();
var arayukselenliste = new List<Trend>();
var dusentrend = new List<float>();
var yukselentrend = new List<float>();
var dusenler = new List<Trend>();
var yukselenler = new List<Trend>();
var dusenbitisbari = ListeTepelerArdisik.First();
var yukselenbitisbari = ListeDiplerArdisik.First();
var farkdusen = Math.Abs(dusenbitisbari - DusenAratrendBaslangicBari);
var farkyukselen = Math.Abs(yukselenbitisbari - YukselenAratrendBaslangicBari);
if (farkdusen > 20)
{
for (int i = 0; i < 5; i++)
{
for (int x = -2; x < 4; x++)
{
var trend = Sistem.OtoTrendDusen(Barsayisi - DusenAratrendBaslangicBari + i, Barsayisi - ListeTepelerArdisik.First() + x);
var trendson = TrendDegerlemeDusen(trend, Barsayisi - ListeTepelerArdisik.First() + x);
aradusenliste.Add(trendson);
}
}
var aradusenlisteson = aradusenliste.OrderBy(e => e.TemasSayisi).ToList();
dusentrend = aradusenlisteson.Last().trend;
SistemCizgileriniCiz(dusentrend, 6, acikkirmizi, kalinlik: 1);
}
else if (farkdusen <= 20 && farkdusen > 10)
{
dusentrend = Sistem.OtoTrendDusen(Barsayisi - DusenAratrendBaslangicBari, Barsayisi - ListeTepelerArdisik.First());
SistemCizgileriniCiz(dusentrend, 6, acikkirmizi, kalinlik: 1);
}
if (farkyukselen > 20)
{
for (int i = 0; i < 5; i++)
{
for (int x = -2; x < 4; x++)
{
var trend = Sistem.OtoTrendYukselen(Barsayisi - YukselenAratrendBaslangicBari + i, Barsayisi - ListeDiplerArdisik.First() + x);
var trendson = TrendDegerlemeYukselen(trend, Barsayisi - ListeDiplerArdisik.First() + x);
arayukselenliste.Add(trendson);
}
}
var arayukselenlisteson = arayukselenliste.OrderBy(e => e.TemasSayisi).ToList();
yukselentrend = arayukselenlisteson.Last().trend;
SistemCizgileriniCiz(yukselentrend, 7, acikkirmizi, kalinlik: 1);
}
else if (farkdusen <= 20 && farkdusen > 10)
{
yukselentrend = Sistem.OtoTrendYukselen(Barsayisi - YukselenAratrendBaslangicBari, Barsayisi - ListeDiplerArdisik.First());
SistemCizgileriniCiz(yukselentrend, 7, acikkirmizi, kalinlik: 1);
}
//List<float> arayukselentrend = Sistem.OtoTrendYukselen(Barsayisi-YukselenAratrendBaslangicBari,Barsayisi-ListeDiplerArdisik.First());
//SistemCizgileriniCiz(arayukselentrend, 7, acikkirmizi, kalinlik: 1);
}
public void YataylariCiz()
{
var mavi = Color.DarkBlue; var kirmizi = Color.Red; var yesil = Color.DarkGreen; var acikkirmizi = Color.IndianRed;
List<YatayTrend> direncler = new List<YatayTrend>();
List<YatayTrend> destekler = new List<YatayTrend>();
List<float> hhv = Sistem.HHV(30);
List<float> llv = Sistem.LLV(30);
float yuksek = (hhv.Last() <= (SonFiyat +kademeBuyuklugu*yataykademecarpani)) ? SonFiyat+kademeBuyuklugu*yataykademecarpani*25 : hhv.Last();
float yukseksayac = yuksek;
float yuksekpuansayac = 0f;
float dusuk = (llv.Last() >= (SonFiyat - kademeBuyuklugu * yataykademecarpani)) ? SonFiyat - kademeBuyuklugu*yataykademecarpani*25 : llv.Last();
float dusuksayac = dusuk;
float dusukpuansayac = 0f;
while (yukseksayac >= SonFiyat+kademeBuyuklugu*yataykademecarpani )
{
var direnc = new YatayTrend();
var yatay = Sistem.Liste(yukseksayac);
direnc = TrendYatayDegerleme(yatay);
if (direnc.UyumPuan >= yuksekpuansayac) { direncler.Add(direnc); yuksekpuansayac = direnc.UyumPuan; }
direncler.Add(direnc);
yukseksayac = yukseksayac - kademeBuyuklugu;
}
var direnclerson= direncler.OrderBy(e => e.UyumPuan).ToList();
if(direnclerson.Last().trend.Last()< SonFiyat + kademeBuyuklugu*yataykademecarpani && direnclerson.Count > 1)
{
SistemCizgileriniCiz(direnclerson.Last().trend, 10, acikkirmizi, kalinlik: 1, stil:3);
SistemCizgileriniCiz(direnclerson[direnclerson.Count-2].trend, 11, acikkirmizi, kalinlik: 1, stil: 3);
}
else SistemCizgileriniCiz(direnclerson.Last().trend, 10, acikkirmizi, kalinlik: 1, stil: 3);
while (dusuksayac <= SonFiyat-kademeBuyuklugu*yataykademecarpani)
{
var destek = new YatayTrend();
var yatay = Sistem.Liste(dusuksayac);
destek = TrendYatayDegerleme(yatay);
if (destek.UyumPuan >= dusukpuansayac) { destekler.Add(destek); dusukpuansayac = destek.UyumPuan; }
dusuksayac = dusuksayac + kademeBuyuklugu;
}
var desteklerson = destekler.OrderBy(e => e.UyumPuan).ToList();
if (desteklerson.Last().trend.Last() > SonFiyat - kademeBuyuklugu * yataykademecarpani && desteklerson.Count > 1)
{
SistemCizgileriniCiz(desteklerson.Last().trend, 12, mavi, kalinlik: 1, stil: 3);
SistemCizgileriniCiz(desteklerson[desteklerson.Count - 2].trend, 13, mavi, kalinlik: 1, stil: 3);
}
else SistemCizgileriniCiz(desteklerson.Last().trend, 12, mavi, kalinlik: 1, stil: 3);
}
/// <summary>
/// iki bar arası trend olusturur, deger: High, Low, Open, Close
/// </summary>
/// <param name="ilkbar">baslangıc barı ilk tarihli</param>
/// <param name="ikincibar">son bar yakin tarihli</param>
/// <param name="deger"> High, Low, Open, Close</param>
/// <returns></returns>
public List<float> IkiBarArasiTrendOlustur(int ilkbar, int ikincibar, string deger = "High")
{
var verilerilkbar = Veriler[ilkbar].High;
var verilerikincibar = Veriler[ikincibar].High;
if (deger == "Low")
{
verilerilkbar = Veriler[ilkbar].Low;
verilerikincibar = Veriler[ikincibar].Low;
}
else if (deger == "Open")
{
verilerilkbar = Veriler[ilkbar].Open;
verilerikincibar = Veriler[ikincibar].Open;
}
else if (deger == "Close")
{
verilerilkbar = Veriler[ilkbar].Close;
verilerikincibar = Veriler[ikincibar].Close;
}
var trend = Sistem.TrendCiz(Veriler[ilkbar].Date, verilerilkbar, Veriler[ikincibar].Date,
verilerikincibar);
return trend;
}
public Trend TrendDegerlemeDusen(List<float> trend, int sonbar)
{
var trendson = new Trend();
trendson.trend = trend;
int sontemasbari = 0;
int baslangicbari = TrendBaslangicBari(trend);
int trenduzerikapanissayisi = 0;
int trenduzerisarkmasayisi = 0;
int trenduzeriacilissayisi = 0;
int trendtemassayisi = 0;
int uzunluk = sonbar - baslangicbari;
trendson.Uzunluk = uzunluk;
if (sonbar > Barsayisi) sonbar = Barsayisi;
for (int i = baslangicbari; i <= sonbar; i++)
{
var fark = trend[i] - this.Yuksekler[i];
var MutlakFark = Math.Abs(fark);
if (Acilislar[i] > trend[i] && MutlakFark >= kademeBuyuklugu * TrendTemasCarpani * PeriyotCarpani)
{
trenduzeriacilissayisi++;
}
if (Kapanislar[i] > trend[i] && MutlakFark >= kademeBuyuklugu * TrendTemasCarpani * PeriyotCarpani)
{
trenduzerikapanissayisi++;
}
if (Yuksekler[i] > trend[i] && MutlakFark >= kademeBuyuklugu * TrendTemasCarpani * PeriyotCarpani)
{
trenduzerisarkmasayisi++;
}
if ( MutlakFark < kademeBuyuklugu * TrendTemasCarpani * PeriyotCarpani)
{
trendtemassayisi++; sontemasbari = i;
}
if (fark==0)
{
trendtemassayisi++; sontemasbari = i;
}
}
trendson.YukariSarkmalar = trenduzerisarkmasayisi;
trendson.YukariKapanislar = trenduzerikapanissayisi;
trendson.YukariAcilislar = trenduzeriacilissayisi;
trendson.TemasSayisi = trendtemassayisi;
trendson.BaslangicBari = baslangicbari;
trendson.sontemasbari = sontemasbari;
return trendson;
}
public Trend TrendDegerlemeYukselen(List<float> trend, int sonbar)
{
var trendson = new Trend();
trendson.trend = trend;
int sontemasbari = 0;
int baslangicbari = TrendBaslangicBari(trend);
int trendaltikapanissayisi = 0;
int trendaltisarkmasayisi = 0;
int trendaltiacilissayisi = 0;
int trendtemassayisi = 0;
int uzunluk = sonbar - baslangicbari;
trendson.Uzunluk = uzunluk;
if (sonbar > Barsayisi) sonbar = Barsayisi;
for (int i = baslangicbari; i <= sonbar; i++)
{
var fark = this.Dusukler[i] - trend[i];
var MutlakFark = Math.Abs(fark);
if (Acilislar[i] < trend[i] && MutlakFark >= kademeBuyuklugu * TrendTemasCarpani * PeriyotCarpani)
{
trendaltiacilissayisi++;
}
if (Kapanislar[i] < trend[i] && MutlakFark >= kademeBuyuklugu * TrendTemasCarpani * PeriyotCarpani)
{
trendaltikapanissayisi++;
}
if (Dusukler[i] < trend[i] && MutlakFark >= kademeBuyuklugu * TrendTemasCarpani * PeriyotCarpani)
{
trendaltisarkmasayisi++;
}
if (MutlakFark < kademeBuyuklugu * TrendTemasCarpani * PeriyotCarpani)
{
trendtemassayisi++; sontemasbari = i;
}
if (fark == 0)
{
trendtemassayisi++; sontemasbari = i;
}
}
trendson.AsagiSarkmalar = trendaltisarkmasayisi;
trendson.AsagiKapanislar = trendaltikapanissayisi;
trendson.AsagiAcilislar = trendaltiacilissayisi;
trendson.TemasSayisi = trendtemassayisi;
trendson.BaslangicBari = baslangicbari;
trendson.sontemasbari = sontemasbari;
return trendson;
}
public YatayTrend TrendYatayDegerleme(List<float> yataytrend)
{
var yatay = new YatayTrend();
yatay.trend = yataytrend;
int baslangicbari = Barsayisi-250;
int tamtemassayisi = 0;
int yaritemassayisi = 0;
int ceyrektemassayisi = 0;
float puan = 0f;
for (int i = baslangicbari; i <= Barsayisi; i++)
{
var fark = this.Yuksekler[i] - yataytrend[i];
var MutlakFark = Math.Abs(fark);
var fark2 = this.Dusukler[i] - yataytrend[i];
var MutlakFark2 = Math.Abs(fark2);
if (MutlakFark < kademeBuyuklugu * TrendTemasCarpani * PeriyotCarpani * 3 && MutlakFark >= kademeBuyuklugu * TrendTemasCarpani * PeriyotCarpani * 2)
{
ceyrektemassayisi++;
}
if (MutlakFark < kademeBuyuklugu * TrendTemasCarpani * PeriyotCarpani*2 && MutlakFark >= kademeBuyuklugu * TrendTemasCarpani * PeriyotCarpani)
{
yaritemassayisi++;
}
if (MutlakFark < kademeBuyuklugu * TrendTemasCarpani * PeriyotCarpani)
{
tamtemassayisi++;
}
if (fark == 0)
{
tamtemassayisi++;
}
if (MutlakFark2 < kademeBuyuklugu * TrendTemasCarpani * PeriyotCarpani * 3 && MutlakFark2 >= kademeBuyuklugu * TrendTemasCarpani * PeriyotCarpani * 2)
{
ceyrektemassayisi++;
}
if (MutlakFark2 < kademeBuyuklugu * TrendTemasCarpani * PeriyotCarpani * 2 && MutlakFark2 >= kademeBuyuklugu * TrendTemasCarpani * PeriyotCarpani)
{
yaritemassayisi++;
}
if (MutlakFark2 < kademeBuyuklugu * TrendTemasCarpani * PeriyotCarpani)
{
tamtemassayisi++;
}
if (fark2 == 0)
{
tamtemassayisi++;
}
puan = (tamtemassayisi * 15 + yaritemassayisi * 4 + ceyrektemassayisi)/10;
}
yatay.TamTemasSayisi = tamtemassayisi;
yatay.YariTemasSayisi = yaritemassayisi;
yatay.CeyrekTemasSayisi = ceyrektemassayisi;
yatay.UyumPuan = puan;
return yatay;
}
public int TrendBaslangicBari(dynamic trend)
{
var uzunluk = 0;
for (int x = 0; x < Barsayisi; x++)
{
if (trend[x] != 0)
{
break;
}
uzunluk++;
}
return uzunluk;
}
public List<int> DiplerGenelilkListeOlustur()
{
var genislik = Barsayisi - 10;
var dipliste = new List<int>();
var baslangic= Ortalamalar.FindIndex(x => x >0.25f);
if (baslangic <=10) baslangic = 20;
var sayac = 0;
for (int x = baslangic; x < Barsayisi - 6; x++)
{
if (sayac > x) continue;
if (Dusukler.GetRange(x - 3, 3).Min() > Dusukler[x] && Dusukler.GetRange(x + 1, 3).Min() >= Dusukler[x])
{
if (Dusukler.GetRange(x - 3, 6).Min() == Dusukler[x])
{
sayac = x;
if (Dusukler[x + 2] == Dusukler[x] && Dusukler[x + 1] > Dusukler[x]) sayac = sayac + 2;
while (Dusukler[sayac + 1] == Dusukler[sayac] )
{
sayac++;
if (sayac + 1 > Barsayisi - 7) break;
}
if (sayac > Barsayisi - 6) break;
if (!dipliste.Contains(sayac) && Dusukler[sayac + 1] > Dusukler[sayac] && Dusukler.GetRange(sayac + 1, 5).Min() >= Dusukler[sayac]) dipliste.Add(sayac);
}
}
}
dipliste.Reverse();
return dipliste;
}
public List<int> TepelerGenelilkListeOlustur()
{
var genislik = Barsayisi - 10;
var baslangic = Ortalamalar.FindIndex(x => x > 0.25);
var tepeListe = new List<int>();
if (baslangic <= 10) baslangic = 20;
var sayac = 0;
for (int x = baslangic; x < Barsayisi - 6; x++)
{
if (sayac > x) continue;
if (Yuksekler.GetRange(x - 3, 3).Max() < Yuksekler[x] && Yuksekler.GetRange(x + 1, 3).Max() <= Yuksekler[x])
{
if (Yuksekler.GetRange(x - 3, 6).Max() == Yuksekler[x])
{
sayac = x;
if (Yuksekler[x + 2] == Yuksekler[x] && Yuksekler[x + 1] < Yuksekler[x]) sayac = sayac + 2;
if (Yuksekler[x + 3] == Yuksekler[x] && Yuksekler[x + 1] < Yuksekler[x] && Yuksekler[x + 2] < Yuksekler[x]) sayac = sayac + 3;
if (Yuksekler[x + 4] == Yuksekler[x] && Yuksekler[x + 1] < Yuksekler[x] && Yuksekler[x + 2] < Yuksekler[x] && Yuksekler[x + 3] < Yuksekler[x]) sayac = sayac + 4;
while (Yuksekler[sayac + 1] == Yuksekler[sayac])
{
sayac++;
if (sayac + 1 > Barsayisi - 7) break;
}
if (sayac > Barsayisi - 6) break;
if (!tepeListe.Contains(sayac) && Yuksekler[sayac + 1] < Yuksekler[sayac] && Yuksekler.GetRange(sayac + 1, 5).Max() <= Yuksekler[sayac]) tepeListe.Add(sayac);
}
}
}
tepeListe.Reverse();
return tepeListe;
}
public List<int> ArdisikTepelerListesiOlustur(List<int> tepeler)
{
var liste = new List<int>();
float deger = 0.0f;
for (int i = 0; i < tepeler.Count; i++)
{
if (Yuksekler[tepeler[i]] > deger)
{
deger = Yuksekler[tepeler[i]];
liste.Add(tepeler[i]);
}
}
return liste;
}
public List<int> ArdisikTepelerListesiOlusturAnaliste()
{
var liste = new List<int>();
float deger = 0.0f;
for (int i = Barsayisi; i > MakulBaslangicBari; i--)
{
if (Yuksekler[i] > deger)
{
deger = Yuksekler[i];
liste.Add(i);
}
}
return liste;
}
public List<int> ArdisikDiplerListesiOlustur(List<int> dipler)
{
var liste = new List<int>();
float deger = float.MaxValue;
for (int i = 0; i < dipler.Count; i++)
{
if (Dusukler[dipler[i]] < deger)
{
deger = Dusukler[dipler[i]];
liste.Add(dipler[i]);
}
}
return liste;
}
public List<int> ArdisikDiplerListesiOlusturAnaliste()
{
var liste = new List<int>();
float deger = float.MaxValue;
for (int i = Barsayisi; i > MakulBaslangicBari; i--)
{
if (Dusukler[i] < deger)
{
deger = Dusukler[i];
liste.Add(i);
}
}
return liste;
}
public int enyakinindeksibul(List<int> liste,int barnumara)
{
int closest = liste.Aggregate((x, y) => Math.Abs(x - barnumara) < Math.Abs(y - barnumara) ? x : y);
int indeks = liste.FindIndex(x => x == closest);
return indeks;
}
public void MesajYazdir(dynamic mesaj)
{
Sistem.Mesaj(mesaj.ToString());
}
public void DebugYazdir(dynamic mesaj)
{
Sistem.Debug(mesaj.ToString());
}
public void SistemCizgileriniCiz(List<float> trend, int cizgino, Color renk, string aciklama = "bos", bool cizilsinmi = true, int kalinlik = 1, int stil=1)
{
Sistem.Cizgiler[cizgino].Deger = trend;
Sistem.Cizgiler[cizgino].Aciklama = aciklama;
Sistem.Cizgiler[cizgino].ActiveBool = cizilsinmi;
Sistem.Cizgiler[cizgino].Kalinlik = kalinlik;
Sistem.Cizgiler[cizgino].Renk = renk;
Sistem.Cizgiler[cizgino].Stil = stil; //1üz, 2:Nokta, 3:Kesik, 4:Yassı
}
}
public class Trend
{
public int TemasSayisi { get; set; }
public int YukariSarkmalar { get; set; }
public int YukariKapanislar { get; set; }
public int AsagiSarkmalar { get; set; }
public int AsagiKapanislar { get; set; }
public int YukariAcilislar { get; set; }
public int AsagiAcilislar { get; set; }
public float UyumPuan { get; set; }
public List<float> trend { get; set; }
public int BaslangicBari { get; set; }
public int SonBar { get; set; }
public float Egim { get; set; }
public int Uzunluk { get; set; }
public float Aci { get; set; }
public int sontemasbari { get; set; }
}
public class YatayTrend
{
public int TamTemasSayisi { get; set; }
public int YariTemasSayisi { get; set; }
public int CeyrekTemasSayisi { get; set; }
public float UyumPuan { get; set; }
public List<float> trend { get; set; }
}
// © copyright Hisseanaliz.net 2018
//
//Bu yazılım kodu ücretsiz olup teknik analiz öğrenmek isteyenlere
//fayalı olacağı düşüncesi ile paylaşılmıştır. kişisel eğitim ve kullanım için hazırlanmış olup
//düzenlemek ve paylaşımını yapmak serbesttir.
//Tüm hakları Hisseanaliz.net'e ait oldup izinsiz ticari maksatlı kullanılamaz.
//Kodun amacı konusunda herhangi bir telkinde veya garantide bulunulmamaktadır.
// Kod aracılığı ile yada koddan faydalanarak finansal piyasalarda işlem yapmak
//isteyenlere garanti sunulmamaktadır.Tüm risk işlem yapanlara aittir.
}
şöyle birşey yazdım
kalanını ilave edersiniz.
https://i.hizliresim.com/LvWbBG.pngPHP Code:
string Sembol = Sistem.Sembol;
string Periyot = Sistem.Periyot;
var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatSec("Kapanis");
var H = Sistem.GrafikFiyatSec("Yuksek");
var L = Sistem.GrafikFiyatSec("Dusuk");
var RSI = Sistem.RSI(15);
var dunRSI = Sistem.Ref(RSI,-1);
Sistem.SorguBaslik[0] = "Kapanis";
Sistem.SorguBaslik[1] = "RSI";
Sistem.SorguBaslik[2] = "RSI_DUN";
Sistem.SorguBaslik[3] = "D_B_RSI_Farkı";
Sistem.SorguOndalik[0] = 2;
Sistem.SorguOndalik[1] = 2;
Sistem.SorguOndalik[2] = 2;
Sistem.SorguOndalik[3] = 2;
Sistem.SorguDeger[0] = C[Sistem.BarSayisi-1];
Sistem.SorguDeger[1] = RSI[Sistem.BarSayisi-1];
Sistem.SorguDeger[2] = dunRSI[Sistem.BarSayisi-1];
Sistem.SorguDeger[3] = RSI[Sistem.BarSayisi-1]-dunRSI[Sistem.BarSayisi-1];
Sistem.SorguEkle();
Arkadaşlar kolay gelsin. Elimde metastock kodu yazılmış bir indikatör var da ben idealin diline çevirmeye çalıştım 2 3 gün, fakat beceremedim. Çok zor gibi görünmüyor kod ama içinde döngülerin olması gerektiğini düşündüğüm yerleri bir türlü ayarlayamadım.
Yardımcı olacak arkadaşlar varsa onlara biraz zahmet olacak ama, eğer çeviren birisi olursa kullanışlı bir indikatör olduğunu düşünüyorum. :)
Kod burdan itibaren başlıyor:::
SL:=input("SLOW LIMIT",0,10,0.05);
FL:=input("FAST LIMIT",0,10,0.5);
price:=(H+L)/2;
Smooth:=(4*Price + 3*REF(Price,-1) + 2*REF(Price,-2) + REF(Price,-3)) / 10;
Detrender:= (.0962*Smooth + .5769*REF(Smooth,-2) - .5769*REF(Smooth,-4) - .0962*REF(Smooth,-6))*(.075*P+ .54);
Q1:= (.0962*Detrender + .5769*REF(Detrender,-2) - .5769*REF(Detrender,-4) - .0962*REF(Detrender,-6))*(.075*P + .54);
I1:= REF(Detrender,-3);
jI:= (.0962*I1 + .5769*REF(I1,-2) - .5769*REF(I1,-4) - .0962*REF(I1,-6))*(.075*P + .54);
jQ:= (.0962*Q1 + .5769*REF(Q1,-2) - .5769*REF(Q1,-4) - .0962*REF(Q1,-6))*(.075*P + .54);
I21:= I1 - jQ;
Q21:= Q1 + jI;
I2:= .2*I21 + .8*PREV;
Q2:= .2*Q21 + .8*PREV;
Re1:= I2*REF(I2,-1) + Q2*REF(Q2,-1);
Im1:= I2*REF(Q2,-1) - Q2*REF(I2,-1);
Re:= .2*Re1 + .8*PREV;
Im:= .2*Im1 + .8*PREV;
P1:=If(Im<>0 and Re<>0, 2*(4*atn(1))/ATN(Im/Re),PREV);
P2:=If(P1>1.5*REF(P1,-1), 1.5*REF(P1,-1),If(P1 < .67*REF(P1,-1),.67*REF(P1,-1),P1));
P3:=If(P2 < 6,6,If(P2 >50,50,P2));
P:= .2*P3 + .8*REF(P3,-1);
SmoothPeriod:= .33*P + .67*PREV;
PHASE:=If(I1<>0,180/(4*atn(1))*ATN(Q1 / I1),PREV);
DeltaPhase1:= REF(Phase,-1) - Phase;
DeltaPhase:=If(DeltaPhase1<1,1,DeltaPhase1);
alpha1:=FL/ DeltaPhase;
alpha:=If(alpha1< SL,SL,IF(FL<alpha1,FL,alpha1));
MAMA:= alpha*PRICE + (1 - alpha)*PREV;
FAMA:= .5*alpha*MAMA + (1 - .5*alpha)*PREV;
MAMA;
FAMA
Listeleri tanıttım, değişkenleri de ayarladım ama gerisi gelmedi :D
Bu kodu bi text editore kaydedip -ben şahsen notepad++ kullanıyorum- ismini uzantısıyla beraber lib.cs diye değiştirip ideal klasörüne atın. Daha sonra da sistem tanımlarından bunun içinde olan metodlar var onları şöyle yazıp sistem olarak kaydedin:
Lib.SistemiBaslat(Sistem);
Lib.BarNoktalariTest();
Lib.AnatrendleriCiz();
Lib.AraTerndleriCiz();
Lib.YataylariCiz();
Lib.SistemCizgileriniCiz();
Bilgisayar mühendisi samimi bir arkadaşımdan biraz destek aldım o da yapıverdi :D
Bendekini visual studiodan o biraz oynayıp derlemişti. Ben daha sonra uzantısını değiştirip kendim yukarda anlattığım gibi yaptım yine çalıştı. Ben çizgileri ve bazı bikaç şeyi kendime göre değiştirmiştim. Eğer çalışmazsa ben size kendi lib.cs dosyasını atarım bir şekilde artık.
Kolay gelsin :wave:
kolay gelsin arkadaşlar ideale çevirebilecek var mı?
def c = close(period = agg);
def h = high(period = agg);
def l = low(period = agg);
def pricedata = hl2(period = agg);
DefineGlobalColor("TrendUp", CreateColor(0, 254, 30));
DefineGlobalColor("TrendDown", CreateColor(255, 3, 2));
input lengthCCI = 50;
input lengthATR = 5;
input AtrFactor = 0.7;
def ATRcci = Average(TrueRange(h, c, l), lengthATR) * AtrFactor;
def price = c + l + h;
def linDev = LinDev(price, lengthCCI);
def CCI = if linDev == 0
then 0
else (price - Average(price, lengthCCI)) / linDev / 0.015;
def MT1 = if CCI > 0
then Max(MT1[1], pricedata - ATRcci)
else Min(MT1[1], pricedata + ATRcci);
plot data = MT1;
data.AssignValueColor(if c < MT1 then Color.RED else Color.GREEN);
kolay gelsin
ideal da bi şart belirleyip oraya geldigi an bana otomatik mail atabilmesi için ne yapmam lazım mail ayarları için
Kolay gelsin herkese iyi haftasonlarınız olsun... Yukardaki kod metastock diliyle yazılmış mesa adaptive moving average kodu, ben az bi araştırmadan sonra bu kodun C# ile yazılmış halini de buldum. Onun üzerinde çalışmanın daha mantıklı olduğunu düşündüm ona biraz baktım fakat onu da bir türlü çalıştıramadım. Burda belki forumun ana konusu itibariyle metastocktan ziyade C# ta tecrübeli arkadaşlar varsa C# kodu onların daha da anlayacağı şekildedir diye onu da aşağıda paylaştım:
using System;
using cAlgo.API;
namespace cAlgo.Indicators
{
[Indicator(IsOverlay = true, AccessRights = AccessRights.None)]
public class Mama : Indicator
{
#region Input Parameters
[Parameter("FastLimit", DefaultValue = 0.5)]
public double FastLimit { get; set; }
[Parameter("SlowLimit", DefaultValue = 0.05)]
public double SlowLimit { get; set; }
#endregion
#region Output
[Output("MAMA", Color = Colors.Blue)]
public IndicatorDataSeries MamaResult { get; set; }
[Output("FAMA", Color = Colors.Red)]
public IndicatorDataSeries FamaResult { get; set; }
#endregion
#region private fields
private IndicatorDataSeries _alpha;
private IndicatorDataSeries _deltaPhase;
private IndicatorDataSeries _detrender;
private IndicatorDataSeries _i1;
private IndicatorDataSeries _i2;
private IndicatorDataSeries _im;
private IndicatorDataSeries _ji;
private IndicatorDataSeries _jq;
private IndicatorDataSeries _period;
private IndicatorDataSeries _period1;
private IndicatorDataSeries _period2;
private IndicatorDataSeries _phase;
private IndicatorDataSeries _price;
private IndicatorDataSeries _q1;
private IndicatorDataSeries _q2;
private IndicatorDataSeries _re;
private IndicatorDataSeries _smooth;
private IndicatorDataSeries _smoothPeriod;
#endregion
protected override void Initialize()
{
_price = CreateDataSeries();
_smooth = CreateDataSeries();
_detrender = CreateDataSeries();
_period = CreateDataSeries();
_period1 = CreateDataSeries();
_period2 = CreateDataSeries();
_smoothPeriod = CreateDataSeries();
_phase = CreateDataSeries();
_deltaPhase = CreateDataSeries();
_alpha = CreateDataSeries();
_q1 = CreateDataSeries();
_i1 = CreateDataSeries();
_ji = CreateDataSeries();
_jq = CreateDataSeries();
_i2 = CreateDataSeries();
_q2 = CreateDataSeries();
_re = CreateDataSeries();
_im = CreateDataSeries();
}
public override void Calculate(int index)
{
if (index <= 5)
{
MamaResult[index] = 0;
FamaResult[index] = 0;
_price[index] = (MarketSeries.High[index] + MarketSeries.Low[index]) / 2;
_smooth[index] = 0;
_detrender[index] = 0;
_period[index] = 0;
_smoothPeriod[index] = 0;
_phase[index] = 0;
_deltaPhase[index] = 0;
_alpha[index] = 0;
_q1[index] = 0;
_i1[index] = 0;
_ji[index] = 0;
_jq[index] = 0;
_i2[index] = 0;
_q2[index] = 0;
_re[index] = 0;
_im[index] = 0;
return;
}
_price[index] = (MarketSeries.High[index] + MarketSeries.Low[index])/2;
_smooth[index] = (4*_price[index] + 3*_price[index - 1] + 2*_price[index - 2] + _price[index - 3])/10;
_detrender[index] = (.0962*_smooth[index] + .5769*_smooth[index - 2] - .5769*_smooth[index - 4] - .0962*_smooth[index - 6])*(.075*_period[index - 1] + .54);
// Compute InPhase and Quadrature components
_q1[index] = (.0962*_detrender[index] + .5769*_detrender[index - 2] - .5769*_detrender[index - 4] - .0962*_detrender[index - 6])*(.075*_period[index - 1] + .54);
_i1[index] = _detrender[index - 3];
// Advance the phase of I1 and Q1 by 90 degrees
_ji[index] = (.0962*_i1[index] + .5769*_i1[index - 2] - .5769*_i1[index - 4] - .0962*_i1[index - 6])*(.075*_period[index - 1] + .54);
_jq[index] = (.0962*_q1[index] + .5769*_q1[index - 2] - .5769*_q1[index - 4] - .0962*_q1[index - 6])*(.075*_period[index - 1] + .54);
// Phasor addition for 3 bar averaging
_i2[index] = _i1[index] - _jq[index];
_q2[index] = _q1[index] + _ji[index];
// Smooth the I and Q components before applying the discriminator
_i2[index] = .2*_i2[index] + .8*_i2[index - 1];
_q2[index] = 0.2*_q2[index] + 0.8*_q2[index - 1];
// Homodyne Discriminator
_re[index] = _i2[index]*_i2[index - 1] + _q2[index]*_q2[index - 1];
_im[index] = _i2[index]*_q2[index - 1] - _q2[index]*_i2[index - 1];
_re[index] = 0.2*_re[index] + 0.8*_re[index - 1];
_im[index] = 0.2*_im[index] + 0.8*_im[index - 1];
double epsilon = Math.Pow(10, -10);
if (Math.Abs(_im[index] - 0.0) > epsilon && Math.Abs(_re[index] - 0.0) > epsilon)
if (Math.Abs(Math.Atan(_im[index] / _re[index]) - 0.0) > epsilon)
_period[index] = 360 / Math.Atan(_im[index] / _re[index]);
else
_period[index] = 0;
if (_period[index] > 1.5*_period[index - 1])
_period[index] = 1.5*_period[index - 1];
if (_period[index] < 0.67*_period[index - 1])
_period[index] = 0.67*_period[index - 1];
if (_period[index] < 6)
_period[index] = 6;
if (_period[index] > 50)
_period[index] = 50;
_period[index] = 0.2*_period[index] + 0.8*_period[index - 1];
_smoothPeriod[index] = .33*_period[index] + .67*_smoothPeriod[index - 1];
if (Math.Abs(_i1[index] - 0) > epsilon)
_phase[index] = Math.Atan(_q1[index]/_i1[index]);
if (Math.Abs(Math.Atan(_q1[index] / _i1[index]) - 0.0) > epsilon)
_phase[index] = Math.Atan(_q1[index] / _i1[index]);
else
_phase[index] = 0;
_deltaPhase[index] = _phase[index - 1] - _phase[index];
if (_deltaPhase[index] < 1)
_deltaPhase[index] = 1;
_alpha[index] = FastLimit/_deltaPhase[index];
if (_alpha[index] < SlowLimit)
_alpha[index] = SlowLimit;
MamaResult[index] = _alpha[index]*_price[index] + ((1 -_alpha[index])*MamaResult[index - 1]);
FamaResult[index] = .5 * _alpha[index] * MamaResult[index] + (1 - 0.5 * _alpha[index]) * FamaResult[index - 1];
}
}
}
Fakat ben bunu da idealin kendi diline çeviremedim. Matematiksel kısmın hemen hemen hepsi tamamen aynı fakat kod her nasılsa ilk _detrender kısmını hesaplarken döngüyü durduruyor :agla: (Eğer bütün hesaplamaları index'i saydıracak şekilde for döngüsünün içine koyduğumuzu varsayarsak ki mantıken öyle olması gerekmez mi?) Dolayısıyla hesaplamaların hepsi sıfır oluyor...
Çok fazla uzun olmaması için kendi kodumu bu iletiye yazmadım, ilgilenen arkadaşlar olursa hemen atıveririm orda listeler falan da yapılı...
Yardımcı olacak arkadaşlara teşekkür ederim şimdiden :)