Hilfe bei der Codierung - Seite 248

 

Hallo, Freunde. Es ist toll Indikator Dynamic_Momentum_Index für Thinkorswim. Es ist möglich , es für metatrader 4? umzuschreiben. Oder vielleicht hat jemand einen solchen Indikator für MT4?

declare lower;input price = close;input stdevLength = 5;input avgOfStdevLength = 10;input DYMILength = 30;input DYMILengthLowerLimit = 3;input DYMILengthUpperLimit = 30;assert(DYMILengthLowerLimit > 0, "'dymi length lower limit' must be positive: " + DYMILengthLowerLimit);assert(DYMILength zwischen DYMILengthLowerLimit und DYMILengthUpperLimit, "'dymi length' must be between lower and upper limit: " + DYMILength);def std = stdev(price, stdevLength);def ratio = std / Average(std, avgOfStdevLength);def dynamicLength = Floor(DYMILength / ratio);def limitedLength = if dynamicLength between DYMILengthLowerLimit and DYMILengthUpperLimit then dynamicLength else 0;def sf = 2 / (limitedLength + 1);def bn = Max(barNumber(), 0);# 10^-5 Genauigkeit für Ema-Multiplikatordef expIndex = if limitedLength == 0 then 1 else max(1, bn - ceil(-5 / lg(1 - sf)));def fromIndex = if isNan(expIndex) then 1 else expIndex;def chg = price - price[1];def absChg = AbsValue(chg);def netChgAvg = fold indexN = fromIndex bis bn + 1 with accuN do sf * (if isnan(getValue(chg, bn - indexN)) then 0 else getValue(chg, bn - indexN)) + (1 - sf) * accuN;def totChgAvg = fold indexT = fromIndex bis bn + 1 with accuT do sf * (if isnan(getValue(absChg, bn - indexT)) then 0 else getValue(absChg, bn - indexT)) + (1 - sf) * accuT;def RSI = if totChgAvg != 0 and limitedLength != 0 then 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(if RSI > overbought then DYMI.Color("OverBought") else if RSI =OverBought, "OverBought", Alert.BAR, Sound.ring);Alert (DYMI=OverBought then high*72 else double.nan;DotDn.setStyle(curve.POINTS);DotDn.setPaintingStrategy(paintingStrategy.arROW_DOWN);DotDn.setLineWeight(3);DotDn.setDefaultColor(color.wHITE);plot DotUp = if DYMI<=OverSold then low*-2 else 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);

Dateien:
image_4.jpg  392 kb
 
olvus:
Hallo, Freunde. Es ist toll Indikator Dynamic_Momentum_Index für Thinkorswim. Ist es möglich , es für metatrader 4? umzuschreiben. Oder vielleicht hat jemand einen solchen Indikator für MT4?

declare lower;input price = close;input stdevLength = 5;input avgOfStdevLength = 10;input DYMILength = 30;input DYMILengthLowerLimit = 3;input DYMILengthUpperLimit = 30;assert(DYMILengthLowerLimit > 0, "'dymi length lower limit' must be positive: " + DYMILengthLowerLimit);assert(DYMILength zwischen DYMILengthLowerLimit und DYMILengthUpperLimit, "'dymi length' must be between lower and upper limit: " + DYMILength);def std = stdev(price, stdevLength);def ratio = std / Average(std, avgOfStdevLength);def dynamicLength = Floor(DYMILength / ratio);def limitedLength = if dynamicLength between DYMILengthLowerLimit and DYMILengthUpperLimit then dynamicLength else 0;def sf = 2 / (limitedLength + 1);def bn = Max(barNumber(), 0);# 10^-5 Genauigkeit für Ema-Multiplikatordef expIndex = if limitedLength == 0 then 1 else max(1, bn - ceil(-5 / lg(1 - sf)));def fromIndex = if isNan(expIndex) then 1 else expIndex;def chg = price - price[1];def absChg = AbsValue(chg);def netChgAvg = fold indexN = fromIndex bis bn + 1 with accuN do sf * (if isnan(getValue(chg, bn - indexN)) then 0 else getValue(chg, bn - indexN)) + (1 - sf) * accuN;def totChgAvg = fold indexT = fromIndex bis bn + 1 with accuT do sf * (if isnan(getValue(absChg, bn - indexT)) then 0 else getValue(absChg, bn - indexT)) + (1 - sf) * accuT;def RSI = if totChgAvg != 0 and limitedLength != 0 then 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(if RSI > overbought then DYMI.Color("OverBought") else if RSI =OverBought, "OverBought", Alert.BAR, Sound.ring);Alert (DYMI=OverBought then high*72 else double.nan;DotDn.setStyle(curve.POINTS);DotDn.setPaintingStrategy(paintingStrategy.arROW_DOWN);DotDn.setLineWeight(3);DotDn.setDefaultColor(color.wHITE);plot DotUp = if DYMI<=OverSold then low*-2 else 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);

olvus,

Siehe diesen Beitrag: https: //www.mql5.com/en/forum/172919/page4. Vielleicht hilft das

 

Hallo mladen, ich möchte Sie um diesen Gefallen bitten.... haben Sie die Möglichkeit, dieses Programm für MT4 zu übersetzen?

Trotzdem vielen Dank.

DIES IST DAS PROGRAMM IN ANDERER SPRACHE:// var: domanda(0), offerta(0), var1(0), var2(0), indzona1;

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

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

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

// offerta= MOV(var2,450,S);

// indzona1= CreateWiewport(100);

// PlotChart(domanda, indzona1, grün, solid, 1);

// PlotChart(offerta, indzona1, red, solid, 1);THIS IS MY WORK FOR MT4 LANGUAGE, BUTTER AFTER THE LATEST UPDATE, IT DOESN'T WORK ANYMORE:

#property indicator_separate_window

#Eigenschaft indicator_puffer 2

#property indicator_color1 Grün

#eigenschaft indicator_color2 Rot

#Eigenschaft indicator_width1 1

#eigenschaft indicator_width2 1

extern int periodo=128;

double DOMANDA[];

double OFFERTA[];

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

//| Benutzerdefinierte Indikator-Initialisierungsfunktion |

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

int init()

{

IndicatorDigits(6);

IndicatorBuffers(2);

SetIndexPuffer(0,DOMANDA);

SetIndexPuffer(1,ANGEBOTTA);

return(0);

}

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

//| Benutzerdefinierte Funktion zur Deinitialisierung des Indikators |

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

int deinit()

{

//----

//----

return(0);

}

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

//| Benutzerdefinierte Indikator-Iterationsfunktion |

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

int start()

{

int gezählte_Balken=IndikatorGezählt();

int limit = Balken - gezählte_Balken;

double var_dom[10000];

double var_off[10000];

ArraySetAsSeries(var_dom,true);

ArraySetAsSeries(var_off,true);

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

{

var_dom = ((Hoch/Schluss)-1)*Volumen;

var_off = ((Tief/Schluss)-1)*Volumen * (-1);

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

OFFERTA = iMAOnArray(var_off,0,periodo,0,MODE_SMA,i);

}

return(0);

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

 
Stephan73:
Hallo mladen, ich möchte dich um diesen Gefallen bitten.... hast du die Möglichkeit, dieses Programm für MT4 zu übersetzen?

Ich danke Ihnen trotzdem.

DIES IST DAS PROGRAMM IN ANDERER SPRACHE:// var: domanda(0), offerta(0), var1(0), var2(0), indzona1;

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

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

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

// offerta= MOV(var2,450,S);

// indzona1= CreateWiewport(100);

// PlotChart(domanda, indzona1, grün, solid, 1);

// PlotChart(offerta, indzona1, red, solid, 1);THIS IS MY WORK FOR MT4 LANGUAGE, BUTTER AFTER THE LATEST UPDATE, IT DOESN'T WORK ANYMORE:

#property indicator_separate_window

#Eigenschaft indicator_puffer 2

#property indicator_color1 Grün

#eigenschaft indicator_color2 Rot

#Eigenschaft indicator_width1 1

#eigenschaft indicator_width2 1

extern int periodo=128;

double DOMANDA[];

double OFFERTA[];

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

//| Benutzerdefinierte Indikator-Initialisierungsfunktion |

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

int init()

{

IndicatorDigits(6);

IndicatorBuffers(2);

SetIndexPuffer(0,DOMANDA);

SetIndexPuffer(1,ANGEBOTTA);

return(0);

}

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

//| Benutzerdefinierte Funktion zur Deinitialisierung des Indikators |

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

int deinit()

{

//----

//----

return(0);

}

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

//| Benutzerdefinierte Indikator-Iterationsfunktion |

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

int start()

{

int gezählte_Balken=IndikatorGezählt();

int limit = Balken - gezählte_Balken;

double var_dom[10000];

double var_off[10000];

ArraySetAsSeries(var_dom,true);

ArraySetAsSeries(var_off,true);

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

{

var_dom = ((Hoch/Schluss)-1)*Volumen;

var_off = ((Tief/Schluss)-1)*Volumen * (-1);

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

OFFERTA = iMAOnArray(var_off,0,periodo,0,MODE_SMA,i);

}

return(0);

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

Stephan

Bitteschön:

Dateien:
_stephan.mq4  2 kb
stephan.gif  61 kb
 
mladen:
Stephan Hier, bitte sehr:

Yeesss, perfekt !!!!

Vielen Dank!!!

 

Herr mladen, ist es möglich, den thinkorswim-Indikator in einen Metatrader 4-Indikator umzuschreiben (Beitrag 2474)?

 

Hallo zusammen ,

Sagen wir, ich habe eine Funktion, die alle Marktaufträge in einer Schleife durchläuft und den letzten mit lastTicket() auswählt. Dann verwende ich ot = orderopentime(). Wie erhalte ich den Wert von ot, so dass ich den Wert von ot in einer anderen Funktion des Programms verwenden kann. Ich möchte checko() nicht innerhalb der Schleife durch alle Funktionen aufrufen.

void checko()

{

if (ot>presetdatetime)

{

closeorder();

}

}

 
hermes:
Hallo zusammen,

Sagen wir, ich habe eine Funktion, die alle Marktaufträge in einer Schleife durchläuft und den letzten mit lastTicket() auswählt. Dann verwende ich ot = orderopentime(). Wie erhalte ich den Wert von ot, so dass ich den Wert von ot in einer anderen Funktion des Programms verwenden kann. Ich möchte checko() nicht innerhalb der Schleife durch alle Funktionen aufrufen.

void checko()

{

if (ot>presetdatetime)

{

closeorder();

}

}

hermes

Eine Frage: Meinen Sie mit dem letzten Bestellschein den größten (was in der Regel die neueste Bestellung ist) oder den kleinsten (was in der Regel die älteste Bestellung ist)?

 
mladen:
hermes Eine Frage: Meinst du mit dem letzten Bestellschein den größten (was normalerweise die jüngste Bestellung ist) oder den kleinsten (was normalerweise die älteste Bestellung ist)?

Danke Mladen, ich meine den größten, der die neueste Bestellung ist.

 
hermes:
Danke Mladen, ich meine die größte, d.h. die neueste Reihenfolge.

dann können Sie eine Funktion wie diese verwenden:

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);

}

}

PS: Es macht keinen Unterschied zwischen Symbolen oder eventuellen magischen Zahlen. Wenn diese auch geprüft werden sollen, muss die obige Funktion um einen zusätzlichen Code ergänzt werden