Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 386

 

Hmm ... Ich hatte nicht daran gedacht, die Koordinaten zu ändern. Danke für den Hinweis.

Dann habe ich eine Frage. Es gibt eine Einstiegsbedingung. Ich habe es durch statische Variablen implementiert, so dass es nicht bei jedem Tick auf Null zurückgesetzt wird. Nun, an einigen Stellen des Charts zeichnet der Roboter einen Einstiegspunkt, an dem es keine horizontalen Niveaus gibt und somit auch keinen Schnittpunkt mit dem MA. Bitte führen Sie den Code in Ihrem Tester aus und Sie werden das Problem sehen. Zum EURUSD. Vielleicht muss dieses Problem auf andere Weise gelöst werden? Ich bin kein Profi im Programmieren.

Das heißt, das Muster ist aufgetaucht, die Levels wurden gezeichnet und der Roboter wartet auf drei Kreuze eines der Levels.

Was halten Sie davon?

 
voron_026:

Hmm ... Ich hatte nicht daran gedacht, die Koordinaten zu ändern. Danke für den Hinweis.

Dann habe ich eine Frage. Es gibt eine Einstiegsbedingung. Ich habe sie durch statische Variablen implementiert, damit sie nicht bei jedem Tick auf Null zurückgesetzt wird. Nun, an einigen Stellen des Charts zeichnet der Roboter einen Einstiegspunkt, an dem es keine horizontalen Niveaus gibt und somit auch keinen Schnittpunkt mit dem MA. Bitte führen Sie den Code in Ihrem Tester aus und Sie werden das Problem sehen. Zum EURUSD. Vielleicht muss dieses Problem auf andere Weise gelöst werden? Ich bin kein Profi im Programmieren.

Das heißt, das Muster ist aufgetaucht, die Levels sind eingezeichnet und der Roboter wartet auf drei Kreuze eines der Levels.

Was halten Sie davon?

Wer braucht das schon, wenn ich das mal so sagen darf? Schauen Sie nach, woher der Roboter die Werte bekommt, und Sie werden eine andere Lösung für das Problem finden.

 

Hilfe Zwei gibt Fehler aus! Ich habe die Fehler in rot hervorgehoben, helfen Sie PLZ!



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

//| Nachlaufender Stop von Asyll.mq4 |

//| Copyright 2017, MetaQuotes Software Corp.

//| https://www.mql5.com |

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

#eigentum copyright "Alibek Asyll"

#property link "https://www.mql4you.com"


extern int TralType = 0; // 0-Sar, 1-ATR, 2-HMA.

extern double SAR_Step = 0,02;

extern double SAR_Max = 0.2;

extern int ATR_Period = 14;

extern double ATR_K = 2.0;

extern inttern MMA_Period = 16;

extern int int MMA_Methode = 3;

extern inttern MMA_Shift = 0;

datetime LBT;

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

Experteninitialisierungsfunktion//|

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

int init()

{

//---

//---

zurück(0);

}

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

//| Experten-Deinitialisierungsfunktion |

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

int deinit()

{

//---

zurück(0);

}

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

//| Experten-Tick-Funktion |

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

int start()


{

bool error = false;

if (LBT!=Time[0] {

if (AufträgeSumme()>0) {

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

if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()<2) {

double SL = OrderStopLoss();

if (OrderType()==0) {

switch (TralType) {

Fall 0: SL = iSAR(NULL,0,SAR_Step, SAR_Max,0);

Pause;

Fall 1: SL = Hoch[1] - iATR(NULL,0,ATR_Periode,1)*ATR_K;

Pause;

Fall 2: SL = iCustom(NULL,0, "VininI_HMA_sound&amp",HMA_Period, HMA_Method, 3, HMA_Shift,false,false,",1,0,0);

Pause;

}

wenn (SL<OrderStopLoss())

SL = OrderStopLoss();

}

wenn (OrderType()==1){

switch (TralType){

Fall 0: SL = iSAR(NUll,0,SAR_Step, SAR_Max,0);

Pause;

Fall 1: SL = Low[1] + iATR(NULL,0,ATR_Periode,1)*ATR_K;

Pause;

Fall 2: SL = iCustom(NULL,0, "VininI_HMA_sound&amp",HMA_Period, HMA_Method, 2, HMA_Shift,false,false,",1,0,0);

Pause;

}

wenn (SL>OrderStopLoss())

SL = OrderStopLoss();

}

wenn (SL!=OrderStopLoss()) {

if (!OrderModify(OrderTicket(),OrderOpenPrice(),OrderTakeProfit(),0))

error = true;

}

}

wenn (!Fehler)

LBT = Zeit[0];

}


return();

}

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

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
Выберите подходящую торговую стратегию и оформите подписку на нее в пару кликов. Все Сигналы сопровождаются подробной статистикой и графиками. Станьте Поставщиком торговых сигналов и продавайте подписку тысячам трейдеров по всему миру. Наш сервис позволит вам хорошо зарабатывать на прибыльной стратегии даже при небольшом стартовом капитале...
 
Asyll: Hilfe zwei gibt Fehler aus! Hervorgehobene Fehler in rot, Hilfe PLZ!

Es ist sinnvoll, die Schaltfläche SRC zum Einfügen von Code zu verwenden. Melden Sie den Text der Fehler. Entfernen Sie den Text, um den Experten zu beschleunigen:

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

//| Expert initialization function                                   |

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

int init()

  {

//---

   

//---

   return(0);

  }

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

//| Expert deinitialization function                                 |

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

int deinit()

  {

//---

   return(0);

  }

Der Aufruf dieser Funktionen kostet Zeit - und sie sind leer. Und ohne sie wäre es einfacher, mit Programmtexten zu arbeiten. Zählen Sie die geschweiften Klammern. Um dies zu vereinfachen, können Sie den Styler im Menü Extras verwenden. Verwerfen Sie die leeren Zeilen.

Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Данная функция предназначена для оформления исходного кода в соответствии с рекомендуемым стандартом. Это позволяет сделать код более читаемым, выглядящем профессионально. Грамотно оформленный код гораздо проще анализировать в последующем как его автору, так и другим пользователям. Для того чтобы запустить стилизатор, необходимо выполнить...
 

Guten Tag an alle.

Ich habe eine einfache Idee, die ich versuche, auf einem MT-4-Tester zu programmieren und zu testen

Eröffnen Sie Aufträge, wenn die folgenden Bedingungen gleichzeitig erfüllt sind

1. Beim Öffnen einer einminütigen Kerze

2 Zu dem von mir gewünschten Preis

3. zum gewünschten Termin

(4) Der Preiswert muss genau mit dem Wert des Tages übereinstimmen.

Zum Beispiel war der 27. Tag eine einminütige Kerze mit dem Eröffnungskurs 1,2414

Ich muss eine Order eröffnen 1) auf die offene Kerze 2) bei 1.2414 3) aber am nächsten Tag, der nach dem 27. folgt

Am 28. Mai beispielsweise wurde eine 1-Minuten-Kerze bei 1,2438 eröffnet.

Ich muss eine Order eröffnen 1) bei der offenen Kerze 2) bei 1,2438 3) ABER AM NÄCHSTEN TAG NACH DEM 28.

Zum Beispiel gab es am 12. Oktober eine 1-Minuten-Kerze, die bei 1,2451 eröffnet wurde.

Ich muss eine Order eröffnen 1) bei der offenen Kerze 2) bei 1,2451 3) ABER AM NÄCHSTEN TAG NACH DEM 12.


Um diese Idee zu verwirklichen, habe ich angefangen, das Thema Arrays zu studieren und zwei eindimensionale Arrays erstellt, aber es funktioniert nicht

Ich wäre Ihnen sehr dankbar, wenn Sie meinen Code korrigieren könnten, um die obige Idee umzusetzen

Ich bin etwas langsam, daher wäre ich Ihnen sehr dankbar, wenn Sie den richtigen Code schreiben könnten, anstatt ihn in Worten zu erklären.

Auf diese Weise werde ich es viel schneller verstehen.

Hier ist mein Code.

double mass[3]=
{
1.2414,
1.2438,
1.2451
};
int mass1[3]=
{
27,
28,
12
};
double value = NormalizeDouble( Bid,4) ;
double S = ArrayBsearch(mass,  value,  WHOLE_ARRAY,  0, MODE_ASCEND);
int value1 = Day() ;
int S1 = ArrayBsearch(mass1,  value1, WHOLE_ARRAY,  0, MODE_ASCEND);

if(Bid  == iOpen(NULL,PERIOD_M1,0))
if(Day()!= S1)
if(NormalizeDouble ( Bid,4)== S)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid ,3,Ask+400*Point,Ask-200*Point,"jfh",123 );
}
 

Hallo! Dieser Code soll die Signalebenen verschieben, wenn sich der Preis über die obere oder untere Ebene hinaus bewegt, aber das passiert nicht. Bitte sagen Sie mir, wo der Fehler liegt.

/-------------------------выход цены за пределы сигнальных уровней-----------------------------------------------------------------------------------------------
if(Bid>=priceA){                                                                                   //если цена вышла за верхнею границу, то переместить сердцевину в новое положение
 ObjectsDeleteAll();
 OR=0;                                                                                             //переменная ордера обнуляется для поиска ситуации открытия новых ордеров
 }                                                                                                 
if(Bid<=priceB){                                                                                   //если цена вышла за нижнею границу, то переместить сердцевину в новое положение
 ObjectsDeleteAll();
 OR=0;                                                                                             //переменная ордера обнуляется для поиска ситуации открытия новых ордеров
 } 
 //----------------------------------------------------------------------------------------------------------------------------------------------------------------
 price=iHigh(Symbol(),PERIOD_M15,0);                                                               //Сигнальный уровень О(Сердцевина)
ObjectCreate("UrO",OBJ_HLINE,0,0,price);
ObjectSet("UrO",OBJPROP_COLOR,clrYellowGreen);                               
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
 priceA=price+30*Point;                                                                            //Сигнальный уровень А(Максимум)
ObjectCreate("UrA",OBJ_HLINE,0,0,priceA);
ObjectSet("UrA",OBJPROP_COLOR,clrDarkSlateBlue); 
//---------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 priceB=price-30*Point;                                                                            //Сигнальный уровень B(Минимум)
ObjectCreate("UrB",OBJ_HLINE,0,0,priceB); 
ObjectSet("UrB",OBJPROP_COLOR,clrOrangeRed); 
 
ANDREY: Zum Beispiel gab es am 27. eine einminütige Kerze mit dem Eröffnungskurs 1,2414

Ich muss eine Order eröffnen 1) bei Eröffnung einer Kerze 2) bei 1,2414 3) ABER AM LETZTEN TAG NACH DEM 27.

Hier ist mein Code.

Erstens ist es kaum sinnvoll, ein bereits normalisiertes BID zu normalisieren, es sei denn, der Ausbilder fordert Sie dazu auf.

Zweitens: Was bedeutet das? Am 27. erschien der Preis und Sie geben die Daten dringend in das Feld ein, um sie am 28. auszulösen? Und was ist, wenn am 28. etwas Dringendes passiert? Sie geben Daten in ein Feld ein, das schwer zu berechnen ist. Ihre Daten sollten berechenbar sein. Ich schlage vor, Ihren EA schrittweise zu debuggen. 1) Ermitteln Sie den gewünschten Preis und zeigen Sie ihn mit der Funktion Alert() an. Wenn Sie sicher sind, dass sie korrekt ist, berechnen Sie die nächste und zeigen Sie diese an... und so weiter bis zum Ende. Es ist zu früh, den gesamten Code im Voraus zu schreiben, da er im Laufe der Fehlersuche noch geändert werden muss. Wie kann man diese Technologie von einfach bis komplex betrachten?

 
vikzip: Der Code wurde geschrieben, um die Signalebenen zu verschieben, wenn sich der Preis über die obere oder untere Ebene hinaus bewegt, aber dies geschieht nicht

Schauen wir uns an, was hier geschrieben steht. Erstens: Die Zeilen sollten kürzer sein. Sie passen dann besser auf den Bildschirm und der Compiler arbeitet schneller.

/-------------------------выход цены за пределы сигнальных уровней-------------------------------------------------
if(Bid>=priceA){                  //если цена вышла за верхнею границу, то переместить сердцевину в новое положение
 ObjectsDeleteAll();
 OR=0;                            //переменная ордера обнуляется для поиска ситуации открытия новых ордеров
 }
if(Bid<=priceB){                  //если цена вышла за нижнею границу, то переместить сердцевину в новое положение
 ObjectsDeleteAll();
 OR=0;                            //переменная ордера обнуляется для поиска ситуации открытия новых ордеров
 } 
 //----------------------------------------------------------------------------------------------------------------
Wenn das BID größer ist, muss man etwas tun. Wenn die BID dann geringer ist, muss das Gleiche getan werden. Man kann es auch kürzer formulieren: Wenn der Preis mehr oder weniger ist, dann ...
Sie schreiben in den Kommentaren, dass Sie etwas verschieben wollen, aber Sie löschen einfach nur alle Objekte. Ihre 10 Zeilen werden durch vier ersetzt.
if((Bid>=priceA) ||(Bid<=priceB)){     //если цена вышла за одну из ГРАНИЦ, то удалить все объекты и очистить признак поиска
   ObjectsDeleteAll();
   OR=0;                               // А это для чего?????????????????
} 

Aber!!! Das OR-Zeichen sollte doch woanders verwendet werden, oder nicht? Anstatt dieses ODER auf Null zu setzen, sollten wir hier neue Objekte erstellen. Oder noch einfacher - anstatt Objekte zu löschen, verschieben Sie sie einfach an einen neuen Ort - das sind nur 3 Zeilen Code. Oder verlangt der Ausbilder mehr?

if((Bid>=priceA) ||(Bid<=priceB)){     //если цена вышла за одну из ГРАНИЦ, сдвинуть уровни
  ObjectSet("UrO",OBJPROP_PRICE1,iHigh(Symbol(),PERIOD_M15,0));   // Так что ли???
   Objectsset( аналогично)
   Objectsset(     )
}
Vom Einfachen zum Falschen oder andersherum?
 
STARIJ:

Erstens ist es kaum ratsam, ein bereits normalisiertes BID zu normalisieren, es sei denn, die Lehrkraft fordert Sie dazu auf

Zweitens: Was haben wir hier? Am 27. tritt ein Preis auf und Sie geben die Daten dringend in das Feld ein, damit es am 28. funktioniert? Und was ist, wenn es am 28. eine dringende Situation gibt? Sie geben Daten in ein Feld ein, das schwer zu berechnen ist. Ihre Daten sollten berechenbar sein. Ich schlage vor, Ihren EA schrittweise zu debuggen. 1) Ermitteln Sie den gewünschten Preis und zeigen Sie ihn mit der Funktion Alert() an. Wenn Sie sicher sind, dass sie korrekt ist, berechnen Sie die nächste und zeigen Sie diese an... und so weiter bis zum Ende. Es ist zu früh, den gesamten Code im Voraus zu schreiben, da er im Laufe der Fehlersuche noch geändert werden muss. Was halten Sie von dieser Technologie, die von einfach bis komplex reicht?

Vielen Dank für den Hinweis.

Aber es scheint mir, dass Sie in Ihrer Argumentation davon ausgehen, dass ich versuche, einen ECHTEN EA zu schreiben.

Es tut mir leid, dass ich Ihnen nicht gesagt habe, dass das nicht der Fall ist.

Ich versuche, das Vorhandensein einer gewissen Regelmäßigkeit, einer Korrelation zwischen den oben genannten Parametern zu testen, d.h. die Idee zu bestätigen oder zu verwerfen, die die Grundlage für einen TORKING Expert Advisor sein könnte.

Daher wäre ich Ihnen dankbar, wenn Sie meinen Code korrigieren würden, so dass alles mit meiner obigen Idee übereinstimmt.

Und Ihre Kommentare werden mir natürlich nützlich sein, wenn ich einen Trading Expert Advisor schreibe.

Dankeschön

 
ANDREY:

Vielen Dank für den Hinweis.

Aber so wie ich es sehe, basiert Ihre Argumentation auf der Tatsache, dass ich versuche, einen ECHTEN EA zu schreiben.

Es tut mir leid, dass ich Ihnen nicht gesagt habe, dass das nicht der Fall ist.

Ich versuche, das Vorhandensein einer gewissen Regelmäßigkeit, einer Korrelation zwischen den oben genannten Parametern zu testen, d.h. die Idee zu bestätigen oder zu verwerfen, die die Grundlage für einen TORKING Expert Advisor sein könnte.

Daher wäre ich Ihnen dankbar, wenn Sie meinen Code korrigieren würden, so dass alles mit meiner obigen Idee übereinstimmt.

Ihre Kommentare werden mir natürlich nützlich sein, wenn ich einen Trading Expert Advisor schreibe.

Dankeschön

Entschuldigung für die Störung. Aber... Inwiefern sollte die Logik des Zeichnens von Linien für einen Handels- und einen Nicht-Handels-EA unterschiedlich sein?

Schauen Sie bei der Arbeit anders auf die Uhr, als wenn Sie sie zu Hause tragen?

Grund der Beschwerde: