Wie programmiert man? - Seite 182

 

...

Es handelt sich nicht um einen Fehler im Code

Gehen Sie zu Tools->History center und wählen Sie dann die 1-Minuten-Daten des Symbols, das Sie testen möchten, aus und laden Sie sie herunter (für eine Genauigkeit von 90 % benötigen Sie nur 1-Minute-Daten, den Rest müssen Sie nicht herunterladen).

Badguy:
Hallo Coders

Ich bin immer noch dabei, meine ersten Schritte in MQL-Code zu lernen.

Woran liegt es, dass ich folgende Meldung im Journal habe:

Testgenerator:

unmatched data error ( Volumengrenze 159 am 2009.05.06 19 15 überschritten )

wo muss ich im Code nachschauen?

Danke
 
abundance:
Mein Freund und ich arbeiten an einem EA. Irgendwann muss er (der EA) den Preis zu einer bestimmten Zeit lesen und abrufen, sagen wir, 17:00 EST... usw.

Kann mir jemand einen Rat geben, wie man das macht, anstatt die Kursbalken rückwärts zu zählen? Vielleicht gibt es bereits eine Funktion dafür geschrieben. Bitte helfen Sie. Vielen Dank an alle und Gott segne Sie!

B rgds/abundance

iBarShift(..) hilft dabei, die Anzahl der Balken im Chart zu ermitteln und dann Close oder Open zu verwenden.

 
Roger09:
Mit iBarShift(..) können Sie die Anzahl der Balken in Ihrem Chart ermitteln und dann Close oder Open verwenden.

Vielen Dank, Roger. Das war sehr hilfreich. Und es tut mir leid, dass ich es nicht deutlicher gemacht habe. Wir brauchen sowohl Geld- als auch Briefkurse. Wie erhalten wir sie? Bitte entschuldigen Sie, wenn es eine dumme Frage ist.

B rgds/Abundance

 

Datenfehler

Hallo mladen

danke für deine schnelle Antwort.

Ich glaube nicht, dass es ein Problem mit den Tickdaten ist, denn wenn ich mit einem anderen EA teste, funktioniert es gut.

Ich denke, es ist ein Problem mit dem Custom-Indicator.

Ich werde folgenden Indikator einbauen: AllAverages_v2.3

double ALL_AVERAGES_0 = iCustom(NULL,ALL_AVERA_TF, "AllAverages_v2.3",ALL_AVERA_PERIOD,ALL_AVERA_SHIFT,ALL_AVERA_METHOD,ALL_AVERA_PRICE,0);

Jetzt habe ich folgende Meldung: Ungültige Indexpuffer-Nummer in der iCustom-Funktion

Wie kann ich diese iCustom-Funktion richtig definieren?

Hallo mladen Ich habe das Problem gefunden

Ich habe einen Parameter vergessen: Farbe

die richtige Definition:

double ALL_AVERAGES_0 = iCustom(NULL,ALL_AVERA_TF, "AllAverages_v2.3",ALL_AVERA_PERIOD,ALL_AVERA_SHIFT,ALL_AVERA_METHOD,ALL_AVERA_PRICE,ALL_AVERA_COLOR,0);

mladen:
Es handelt sich nicht um einen Fehler im Code Gehen Sie zu Tools->History center und wählen Sie dann die 1-Minuten-Daten des Symbols, das Sie testen möchten, aus und laden Sie sie herunter (für eine Genauigkeit von 90 % benötigen Sie nur 1-Minuten-Daten, den Rest müssen Sie nicht herunterladen).
Dateien:
 
abundance:
Vielen Dank, Roger. Das war sehr hilfreich. Es tut mir leid, dass ich es nicht deutlicher gemacht habe. Wir brauchen sowohl Bid- als auch Ask-Kurse. Wie erhalten wir sie? Bitte entschuldigen Sie, wenn es eine dumme Frage ist B rgds/abundance

Alle Preise in den Charts sind Bid. Ask=Bid+MarketInfo(Symbol(),MODE_SPREAD)*Point;

 

Handel einschränken

Ich habe also begonnen, einen grundlegenden EA mit einer dieser Vorlagen zu schreiben, die EA-Builder generieren. Ich scheine die Prämisse der EA-Vorlage nach unten bekommen zu haben, aber ich brauche einen Weg, um die EA nur einen Handel bei max eingeben. Im Moment ist es hält Generierung von Trades und verursacht die Zeichnung nach unten zu lächerlich sein. Hier ist der Handelslos-Code:

//Position überprüfen

bool IsTrade = False;

for (int i = 0; i < Total; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = True;

if(OrderType() == OP_BUY) {

//Schließen

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

//| Signal Begin(Exit Buy) |

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

if (CloseBuy1_1 >= CloseBuy1_2) Order = SIGNAL_CLOSEBUY;

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

//| Signal End(Exit Buy) |

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

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

fortfahren;

}

//Trailing-Stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

fortfahren;

}

}

}

} sonst {

//Schließen

Wenn jemand helfen könnte, wäre ich Ihnen sehr dankbar.

 
Styex:
So begann ich das Schreiben einer grundlegenden EA mit einer dieser Vorlage generieren EA Builder. Ich scheine zu haben, die Prämisse der EA-Vorlage nach unten, aber ich brauche einen Weg, um die EA nur einen Handel bei max eingeben. Im Moment ist es hält Generierung von Trades und Ursachen der Draw-Down zu rediculous. Wenn jemand helfen könnte, wäre es sehr geschätzt werden.
if (OrdersTotal() == 0)

{

//Check position

bool IsTrade = False;

for (int i = 0; i < Total; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = True;

if(OrderType() == OP_BUY) {

//Close

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

//| Signal Begin(Exit Buy) |

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

if (CloseBuy1_1 >= CloseBuy1_2) Order = SIGNAL_CLOSEBUY;

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

//| Signal End(Exit Buy) |

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

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

}
 

Danke OnTheRoad

Ich habe diesen EA gefunden, ich verstehe einiges davon nicht.

bool get_signal()

{

bool enable_trade = false;

int trend_up = 0;

int trend_down = 0;

int i;

ArrayInitialize( TradeSign, false );

if( Bars >= 100 ){

for( i = 0 ; i < DEF_MA_NUM ; i++ ){

Buf_MA[0][ i ] = calc_SMA( PERIOD_M30, MA_prm_1, i );

Buf_MA[1][ i ] = calc_SMA( PERIOD_M30, MA_prm_2, i );

Buf_MA[2][ i ] = calc_SMA( PERIOD_M30, MA_prm_3, i ); Buf_MA[3][ i ] = calc_SMA( PERIOD_M30, MA_prm_3, i );

Buf_MA[3][ i ] = calc_SMA( PERIOD_M30, MA_prm_4, i );

Buf_MA[4][ i ] = calc_SMA( PERIOD_M30, MA_prm_5, i );

}

double vRSI = iRSI( Symbol(), PERIOD_M5, RSI_period5, PRICE_CLOSE, 0 );

double vRSI2 = iRSI( Symbol(), PERIOD_M1, RSI_period1, PRICE_CLOSE, 0 );

for( i = 0 ; i < DEF_MA_TYP ; i++ ){

if((Buf_MA[2] < Buf_MA[1]) && (Buf_MA[1] < Buf_MA[0])){

trend_up++;

}

}

if((trend_up > 3) && (vRSI <= RSI_lower) && (vRSI2 <= RSI_lower)){

TradeSign[SIG_Buy] = true;

enable_trade = true;

}

for( i = 0 ; i < DEF_MA_TYP ; i++ ){

if((Buf_MA[2] > Buf_MA[1]) && (Buf_MA[1] > Buf_MA[0])){

trend_down++;

}

}

if((trend_down > 3) && (vRSI >= RSI_upper) && (vRSI2 >= RSI_upper)){

TradeSign[SIG_Sell] = true;

enable_trade = true;

}

}

return(enable_trade);

}

double calc_SMA( int timeframe, int period, int offset )

{

double vMA = 0;

double sum=0;

int i;

for( i = 0 ; i < Periode ; i++ ){

sum += iClose( Symbol(), timeframe, i + offset );

}

vMA = Summe / Periode;

return(vMA);

}

es gibt einen Teil, wo "trendup>3", ist dies von Array berechnet? Wie funktioniert ein Array, so kann "trendup>3" geben? Ist dies für die Ermittlung des Durchschnitts einer einzelnen Linie (die wahrscheinlich nach oben oder unten geht)? Ich verstehe nicht, wie das funktioniert.
Dateien:
 

Wie kann man Experten zurücksetzen, wenn der Zielgewinn erreicht ist? Ich verwende eine Martingale-Strategie, aber sie öffnet die Lose nicht nacheinander...

Beispiel: Lose 0,1, 0,2, 0,4, 0,8, 1,6

offene Lose: 0.1, 0.2, 0.4 -> Gewinnmitnahme bei Los 0.4, aber die nächsten Lose sind 0.8, 0.1, 0.2, 0.4...

kann mir jemand helfen...?

int T=0;

for(int i=0;i<OrdersTotal();i++) {

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()==Symbol() && OrderComment()==Name_ExpertS)

{ T++;

if(OrderType()==OP_BUY) s=1;

if(OrderType()==OP_SELL) s=2;

Last=OrderOpenPrice();

}}

if (Lots<0.1) Lots=0.1;

for (int j=0;j<T;j++)

{

Lots=LotsUP[j];

}
 

Hoch/Tief mit Kriterien

Ich versuche, einen Indikator zu programmieren, der nach bestimmten Kriterien sucht, bevor er eine Kerze als wahres Hoch oder wahres Tief einstuft. Dies sind im Wesentlichen die Kriterien (ich habe ein Diagramm zur Veranschaulichung beigefügt):

1. Suchen Sie nach einem Schlusskurs, der niedriger ist als alle 20 vorherigen Schlusskurse (der zweite Pfeil ist dieser Punkt), dann (2) muss der Schlusskurs 12 Balken später höher sein als die 12 vorherigen Schlusskurse (der dritte Pfeil). Dieser Aufwärtstrend wird sich fortsetzen, bis (3) ein Schlusskurs erreicht wird, der niedriger ist als die 7 vorherigen Schlusskurse (der vierte Pfeil).

Ich habe versucht, die Funktion iLowest ohne viel Erfolg zu verwenden. Ich denke, dass es am besten ist, ein Array zu verwenden, aber meine Kenntnisse über Arrays sind begrenzt.

Gibt es Ideen oder Beispiele für die Verwendung von ArrayMinimum und ArrayMaximum? Oder gibt es eine Möglichkeit, iLowest und iHighest zum Funktionieren zu bringen?

Dateien: