Kodlama yardımı - sayfa 248

 

Merhaba arkadaşlar. Thinkorswim için harika bir Dynamic_Momentum_Index göstergesidir. Metatrader 4 için yeniden yazmak mümkün mü? Ya da belki birinin MT4 için böyle bir göstergesi var?

daha düşük beyan;giriş fiyatı = yakın;giriş stdevLength = 5;giriş avgOfStdevLength = 10;girdi DYMILength = 30;girdi DYMILengthLowerLimit = 3;girdi DYMILengthUpperLimit = 30;assert(DYMILengthLowerLimit > 0: "' dymi pozitif uzunluk olmalıdır " + DYMILengthLowerLimit);assert(DYMILengthLowerLimit ve DYMIILengthUpperLimit arasındaki DYMILength, "'dymi uzunluğu' alt ve üst sınır arasında olmalıdır: " + DYMILength);def std = stdev(price, stdevLength);def oranı = std, Ortalama(std, Ortalama( avgOfStdevLength);def dynamicLength = Floor(DYMILength / ratio);def limitedLength = DYMILengthLowerLimit ve DYMILengthUpperLimit arasında dynamicLength ise, o zaman dynamicLength else 0;def sf = 2 / (limitedLength + 1);def bn = Max(0barNumber()); # 10^-5 ema çarpanı için kesinlik expIndex = eğer limitedLength == 0 ise 1 else max(1, bn - ceil(-5 / lg(1 - sf)));def fromIndex = if isNan(expIndex) o zaman 1 başka expIndex;def chg = fiyat - fiyat[1];def absChg = AbsValue(chg);def netChgAvg = kat indeksN = fromIndex to accuN do sf * ile bn + 1 (eğer isnan(getValue(chg, bn - indexN)) o zaman 0 değilse getValue(chg, bn - indexN)) + (1 - sf) * accuN;def totChgAvg = kat indeksT = fromIndex to accuT do sf * ile bn + 1 (eğer isnan(getValue(absChg, bn - indexT)) sonra 0 else getValue(absChg, bn - indexT)) + (1 - sf) * accuT;def RSI = if totChgAvg != 0 ve limitedLength != 0 sonra 50 * (netChgAvg / totChgAvg + 1) else RSI[1];plot DYMI = RSI;plot OverBought = 90;plot OverSold = 10;DYMI.DefineColor("OverBought", GetColor(5)); DYMI.DefineColor("Normal", GetColor(7));DYMI.DefineColor("OverSold", GetColor(1));DYMI.AssignValueColor(RSI > aşırı alım ise DYMI.Color("Fazla Alım") ise RSI =AşırıBought ise , "OverBought", Alert.BAR, Sound.ring);Alert (DYMI=OverBought sonra yüksek*72 else double.nan;DotDn.setStyle(curve.POINTS);DotDn.setPaintingStrategy(paintingStrategy.arROW_DOWN);DotDn.setLineWeight( 3);DotDn.setDefaultColor(color.wHITE);plot DotUp = DYMI<=OverSold ise düşük*-2 değilse double.nan;Dotup.setStyle(curve.POINTS);Dotup. setPaintingStrategy(paintingStrategy.arROW_UP);Dotup.setLineWeight(3);Dotup.setDefaultColor(color.wHITE);alert(Dotup, "Scalper Buy Signal", Alert.BAR, Sound.ring);alert(DotDn, "Scalper Buy Signal); ", Alert.BAR, Sound.ring);

Dosyalar:
image_4.jpg  392 kb
 
olvus:
Merhaba arkadaşlar. Thinkorswim için harika bir Dynamic_Momentum_Index göstergesidir. Metatrader 4 için yeniden yazmak mümkün mü? Ya da belki birinin MT4 için böyle bir göstergesi var mı?

daha düşük beyan;giriş fiyatı = yakın;giriş stdevLength = 5;giriş avgOfStdevLength = 10;girdi DYMILength = 30;girdi DYMILengthLowerLimit = 3;girdi DYMILengthUpperLimit = 30;assert(DYMILengthLowerLimit > 0, "''dymi pozitif uzunluk olmalıdır " + DYMILengthLowerLimit);assert(DYMILengthLowerLimit ve DYMIILengthUpperLimit arasındaki DYMILength, "'dymi uzunluğu' alt ve üst sınır arasında olmalıdır: " + DYMILength);def std = stdev(price, stdevLength);def oranı = std, Ortalama(std, Ortalama( avgOfStdevLength);def dynamicLength = Floor(DYMILength / ratio);def limitedLength = DYMILengthLowerLimit ve DYMILengthUpperLimit arasında dynamicLength ise, o zaman dynamicLength else 0;def sf = 2 / (limitedLength + 1);def bn = Max(0barNumber()); # 10^-5 ema çarpanı için kesinlik expIndex = eğer limitedLength == 0 ise 1 else max(1, bn - ceil(-5 / lg(1 - sf)));def fromIndex = if isNan(expIndex) o zaman 1 başka expIndex;def chg = fiyat - fiyat[1];def absChg = AbsValue(chg);def netChgAvg = kat indeksiN = fromIndex'ten b'ye accuN do sf * ile n + 1 (eğer isnan(getValue(chg, bn - indexN)) o zaman 0 başka getValue(chg, bn - indexN)) + (1 - sf) * accuN;def totChgAvg = kat indexT = fromIndex to accuT do sf * ile bn + 1 (eğer isnan(getValue(absChg, bn - indexT)) sonra 0 else getValue(absChg, bn - indexT)) + (1 - sf) * accuT;def RSI = if totChgAvg != 0 ve limitedLength != 0 sonra 50 * (netChgAvg / totChgAvg + 1) else RSI[1];plot DYMI = RSI;plot OverBought = 90;plot OverSold = 10;DYMI.DefineColor("OverBought", GetColor(5)); DYMI.DefineColor("Normal", GetColor(7));DYMI.DefineColor("OverSold", GetColor(1));DYMI.AssignValueColor(RSI > aşırı alım ise DYMI.Color("Fazla Alım") ise RSI =AşırıBought ise , "OverBought", Alert.BAR, Sound.ring);Alert (DYMI=OverBought sonra yüksek*72 else double.nan;DotDn.setStyle(curve.POINTS);DotDn.setPaintingStrategy(paintingStrategy.arROW_DOWN);DotDn.setLineWeight( 3);DotDn.setDefaultColor(color.wHITE);plot DotUp = DYMI<=OverSold ise düşük*-2 değilse double.nan;Dotup.setStyle(curve.POINTS);Dotup.s etPaintingStrategy(paintingStrategy.arROW_UP);Dotup.setLineWeight(3);Dotup.setDefaultColor(color.wHITE);alert(Dotup, "Scalper Buy Signal", Alert.BAR, Sound.ring);alert(DotDn, "Scalper Buy Signal); ", Alert.BAR, Sound.ring);

olvus,

Bu gönderiye bakın: https://www.mql5.com/en/forum/172919/page4 . Belki bu yardımcı olur

 

Merhaba mladen, sizden bu iyiliği istiyorum.... bu programı MT4'e çevirme imkanınız var mı?

yine de teşekkür ederim..

BU BAŞKA DİLDEKİ PROGRAMDIR: // var: domanda(0), Offerta(0), var1(0), var2(0), indzona1;

// var1= ((H/C[1])-1)*V;

// var2= ((L/C[1]-1)*V*(-1);

// domanda= HAREKET(var1,450,S);

// teklif= HAREKET(var2,450,S);

// indzona1= CreateWiewport(100);

// PlotChart(domanda, indzona1, yeşil, düz, 1);

// PlotChart(teklif, indzona1, kırmızı, düz, 1); BU BENİM MT4 DİLİ İÇİN İŞİM, AMA SON GÜNCELLEMEDEN SONRA ARTIK ÇALIŞMIYOR:

#özellik göstergesi_separate_window

#özellik göstergesi_tamponları 2

#özellik göstergesi_color1 Yeşil

#özellik göstergesi_renk2 Kırmızı

#özellik göstergesi_width1 1

#özellik göstergesi_width2 1

harici int dönem=128;

çift DOMANDA[];

çift TEKLİF[];

//+------------------------------------------- -------------------+

//| Özel gösterge başlatma işlevi |

//+------------------------------------------- -------------------+

int init()

{

GöstergeDigits(6);

Gösterge Tamponları(2);

SetIndexBuffer(0,DOMANDA);

SetIndexBuffer(1,OFFERTA);

dönüş(0);

}

//+------------------------------------------- -------------------+

//| Özel gösterge sıfırlama işlevi |

//+------------------------------------------- -------------------+

int tanım()

{

//----

//----

dönüş(0);

}

//+------------------------------------------- -------------------+

//| Özel gösterge yineleme işlevi |

//+------------------------------------------- -------------------+

int başlangıç()

{

int counted_bars=IndicatorCounted();

int limit = Çubuklar - sayılan_barlar;

çift var_dom[10000];

çift var_off[10000];

ArraySetAsSeries(var_dom,true);

ArraySetAsSeries(var_off,true);

for(int i=0; i<limit; i++)

{

var_dom = ((Yüksek/Yakın)-1)*Volume;

var_off = ((Düşük/Kapalı)-1)*Volume * (-1);

DOMANDA = iMAOnArray(var_dom,0,periodo,0,MODE_SMA,i);

TEKLİF = iMAOnArray(var_off,0,periodo,0,MODE_SMA,i);

}

dönüş(0);

} //+------------------------------------------------- --------------------+

 
Stephan73:
Merhaba mladen, sizden bu iyiliği istiyorum.... bu programı MT4'e çevirme imkanınız var mı?

yine de teşekkür ederim..

BU BAŞKA DİLDEKİ PROGRAMDIR: // var: domanda(0), Offerta(0), var1(0), var2(0), indzona1;

// var1= ((H/C[1])-1)*V;

// var2= ((L/C[1]-1)*V*(-1);

// domanda= HAREKET(var1,450,S);

// teklif= HAREKET(var2,450,S);

// indzona1= CreateWiewport(100);

// PlotChart(domanda, indzona1, yeşil, düz, 1);

// PlotChart(teklif, indzona1, kırmızı, düz, 1); BU BENİM MT4 DİLİ İÇİN İŞİM, AMA SON GÜNCELLEMEDEN SONRA ARTIK ÇALIŞMIYOR:

#özellik göstergesi_separate_window

#özellik göstergesi_tamponları 2

#özellik göstergesi_color1 Yeşil

#özellik göstergesi_renk2 Kırmızı

#özellik göstergesi_width1 1

#özellik göstergesi_width2 1

harici int dönem=128;

çift DOMANDA[];

çift TEKLİF[];

//+------------------------------------------- -------------------+

//| Özel gösterge başlatma işlevi |

//+------------------------------------------- -------------------+

int init()

{

GöstergeDigits(6);

Gösterge Tamponları(2);

SetIndexBuffer(0,DOMANDA);

SetIndexBuffer(1,OFFERTA);

dönüş(0);

}

//+------------------------------------------- -------------------+

//| Özel gösterge sıfırlama işlevi |

//+------------------------------------------- -------------------+

int tanım()

{

//----

//----

dönüş(0);

}

//+------------------------------------------- -------------------+

//| Özel gösterge yineleme işlevi |

//+------------------------------------------- -------------------+

int başlangıç()

{

int counted_bars=IndicatorCounted();

int limit = Çubuklar - sayılan_barlar;

çift var_dom[10000];

çift var_off[10000];

ArraySetAsSeries(var_dom,true);

ArraySetAsSeries(var_off,true);

for(int i=0; i<limit; i++)

{

var_dom = ((Yüksek/Yakın)-1)*Volume;

var_off = ((Düşük/Kapalı)-1)*Volume * (-1);

DOMANDA = iMAOnArray(var_dom,0,periodo,0,MODE_SMA,i);

TEKLİF = iMAOnArray(var_off,0,periodo,0,MODE_SMA,i);

}

dönüş(0);

} //+------------------------------------------------- --------------------+

Stefan

Hadi bakalım :

Dosyalar:
_stephan.mq4  2 kb
stephan.gif  61 kb
 
mladen:
Stephan Buyrun:

Evet, mükemmel !!!!

Çok teşekkür ederim!!!

 

Bay. mladen, thinkorswim göstergesini metatrader 4 göstergesine (2474 sonrası) yeniden yazmak mümkün mü?

 

Herkese selam ,

Diyelim ki tüm piyasa emirleri arasında dolaşan ve sonuncusunu lastTicket() kullanarak seçen bir fonksiyonum var. sonra ot = orderopentime() kullanıyorum. ot değerini programın başka herhangi bir işlevinde kullanabilmek için ot değerini nasıl alabilirim. örneğin tüm işlevler aracılığıyla döngü içinden checko() işlevini çağırmak istemiyorum

geçersiz kontrol()

{

if (ot>presetdatetime)

{

closeorder();

}

}

 
hermes:
Herkese selam ,

Diyelim ki tüm piyasa emirleri arasında dolaşan ve sonuncusunu lastTicket() kullanarak seçen bir fonksiyonum var. sonra ot = orderopentime() kullanıyorum. ot değerini programın başka herhangi bir işlevinde kullanabilmek için ot değerini nasıl alabilirim. örneğin tüm işlevler aracılığıyla döngü içinden checko() işlevini çağırmak istemiyorum

geçersiz kontrol()

{

if (ot>presetdatetime)

{

closeorder();

}

}

hermes

Bir soru : son sipariş bileti ile en büyük (genellikle en yeni sipariş olan) veya en küçük (genellikle en eski sipariş olan) mı kastediyorsunuz?

 
mladen:
hermes Bir soru : son sipariş bileti ile en büyük (genellikle en yeni sipariş olan) veya en küçük (genellikle en eski sipariş olan) mı kastediyorsunuz?

Teşekkürler Mladen, yani en büyük olan en yeni düzen.

 
hermes:
Teşekkürler Mladen, yani en büyük olan en yeni düzen.

o zaman bunun gibi bir işlevi kullanabilirsiniz:

void deleteGreatestTicketOrder(datetime timeLimit)

{

int largestTicketNo = -1;

for (int i=OrdersTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

largestTicketNo = MathMax(largestTicketNo,OrderTicket());

}

//

//

//

//

//

if (largestTicketNo>-1 )

{

if (OrderSelect(largestTicketNo,SELECT_BY_TICKET,MODE_TRADES))

if (OrderOpenTime()>timeLimit)

OrderDelete(largestTicketNo);

}

}

Not: Semboller veya nihai sihirli sayılar arasında bir fark yaratmaz. Bunların da kontrol edilmesine ihtiyacınız varsa, yukarıdaki işleve bazı ek kodların eklenmesi gerekir.