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

 

Ich kann den Expert Advisor nicht beenden. Das Prinzip ist einfach - zuerst zeichne ich ein Rechteck, das ein Kaufauslöser ist, falls der Preis in seinen Bereich kommt, dann zeichne ich das zweite - wenn der Preis dort ankommt, sollte das Geschäft geschlossen werden.

Aber das Gegenteil ist der Fall - der Preis beginnt sich innerhalb des Bereichs zu öffnen und zu schließen. Was mache ich falsch?


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

//| RECTANGLES OP_BUY.mq4 |

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

#eigenschaft copyright ""

#property link ""

#Eigenschaft Version "1.00"

#Eigenschaft streng


extern int Magic = 777701;

extern double Lot = 0,01;

extern int Schlupf = 3;



int-Ticket;

int OrderOfSymbol;




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

Experteninitialisierungsfunktion //|

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

int OnInit()

{

//---

return(INIT_SUCCEEDED);

}

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

//| Experten-Deinitialisierungsfunktion |

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

void OnDeinit(const int reason)

{

//---

}

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

//| Experten-Tick-Funktion |

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

void OnTick()

{

//---

//Prüfen auf ein Rechteck:

if(ObjectsTotal(OBJ_RECTANGLE)==0)

{Kommentar("Zeichnen Sie ein Rechteck, um ein Kaufgeschäft zu eröffnen!");}


//Gibt den NAME des Rechtecks an:

for(int n=0;n<ObjectsTotal();n++)

{

string name=Objektname(n);

if(ObjectType(name)==OBJ_RECTANGLE)

{

datetime t1a = (datetime) ObjectGet(name,OBJPROP_TIME1);

datetime t2a = (datetime) ObjectGet(name,OBJPROP_TIME2);


double p1a=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE1),Digits);

double p2a=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE2),Digits);

OrderOfSymbol=CounterOrderTradeType(-1);

if (Reihenfolge des Symbols<1)

wenn (Schließen[1]>Öffnen[1])

if(TimeCurrent()>t1a && TimeCurrent()< t2a &&

Gebot < p1a && Gebot > p2a )

{

ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, 0, 0, "open buy order", Magic, 0, Blue);

}

}

}

//Prüfen, ob es bereits ein zweitesRechteck gibt:

if(ObjectsTotal(OBJ_RECTANGLE)==1)

{Kommentar("Ziehen Sie ein zweites Rechteck, um den Kauf zu schließen!");}


//Gibt den NAME des Rechtecks an:

for(int n=0;n<ObjectsTotal();n++)

{

string name=Objektname(n);

if(ObjectType(name)==OBJ_RECTANGLE)

{

datetime t1b = (datetime) ObjectGet(name,OBJPROP_TIME1);

datetime t2b = (datetime) ObjectGet(name,OBJPROP_TIME2);


double p1b=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE1),Digits);

double p2b=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE2),Digits);


if(TimeCurrent()>t1b && TimeCurrent()< t2b &&

Gebot < p1b && Gebot > p2b )

CloseBuyPositions1();

}

}

//Prüfen, ob bereits ein 2. Rechteck vorhanden ist:

if(ObjectsTotal(OBJ_CHANNEL)==2)

{Kommentar("Eröffnungs- und Schlussbereich der Kauforder sind festgelegt - der Handel ist eröffnet!");}


}

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

void CloseBuyPositions1()

{

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

if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

if(OrderMagicNumber() == Magic)

if(OrderSymbol() == Symbol())

{



if(Auftragsart()==OP_BUY)

{

if(OrderClose(OrderTicket(), OrderLots(), Bid, 3, NULL)){Drucken("Order Close");}

}

}

}

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

//| Auftragszählung |

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

int CounterOrderTradeType(ENUM_ORDER_TYPE order_type)

{

int cnt=0;

//----

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

{

if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)==false) weiter;

if(OrderSymbol()!=_Symbol) weiter;

if(order_type == OrderType() || order_type == -1) cnt++;

}

//----

zurück(cnt);

}

 
Порт-моне тв:

Es gibt eine Funktion, mit der man solchen Code posten kann. Das macht es für alle einfacher, Ihren Code zu lesen und zu helfen.

 
MakarFX:

Es gibt eine Funktion, mit der man solchen Code posten kann. Das würde es für alle einfacher machen, Ihren Code zu lesen und zu helfen.

Das wird ihm nicht helfen. Leere Zeilen werden nur von Leuten wie ihm gelesen.

 

Порт-моне тв:

Was mache ich falsch?

Es gibt keine Einzigartigkeit im Namen des Platzes, Sie haben jeden Platz als Bedingung zu kaufen und zu verkaufen

 
Порт-моне тв:

Dies wird Ihnen auch helfen


 

Bitte teilen Sie uns mit, wie der Fehler behoben werden kann

//+------------------------------------------------------------------+
#property copyright   "Copyright 2020,"
#property version     "1.0"
#property strict

//--- Inputs
int   side_position                    = 1;
input ENUM_BASE_CORNER  CornerInfo     = CORNER_RIGHT_UPPER; 
input ENUM_BASE_CORNER  CornerInfo1    = CORNER_LEFT_UPPER; 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(side_position == 2)
   {
   CornerInfo  = CORNER_RIGHT_LOWER; 
   CornerInfo1 = CORNER_LEFT_LOWER;
   }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+

Hier ist der Fehler

'CornerInfo' - constant cannot be modified      Wa.mq4  22      1
'CornerInfo1' - constant cannot be modified     Wa.mq4  23      1
2 errors, 0 warnings            3       1
 
Forallf:

Ich danke Ihnen!

Gern geschehen )

MakarFX:

Können Sie mir bitte sagen, wie ich den Fehler beheben kann?

Hier ist ein Fehler

Eingabevariablen können nicht geändert werden.

Sie können das so machen:

input ENUM_BASE_CORNER  CornerInfo     = CORNER_RIGHT_UPPER; 

ENUM_BASE_CORNER  MyCornerInfo     = CornerInfo; 


.......

if(side_position == 2)
   {
   MyCornerInfo  = CORNER_RIGHT_LOWER; 



 
Aleksei Stepanenko:

Gern geschehen )

Eingabevariablen können nicht geändert werden.

Sie können das so machen:

Danke, ich hab's.

 
MakarFX:

Das wird auch Ihnen helfen.


Das war nicht der Fall. Und ich habe festgestellt, dass die quadratischen Werte nicht, wie es sein sollte, von zwei, sondern von dem letzten genommen werden. Ich weiß nicht, wie man das übertreffen kann. Hätte ich das nicht selbst herausfinden können? Ich spreche nicht fließend mql, deshalb frage ich Sie hier und Sie bieten mir Kämme an.

 
Порт-моне тв:

hat nicht geholfen. Und ich habe festgestellt, dass die quadratischen Werte nicht, wie es sein sollte, von zwei, sondern von dem letzten genommen werden. Ich weiß nicht, wie man das übertreffen kann. Das hätte ich selbst nicht vermutet. Ich spreche nicht fließend mql, deshalb frage ich Sie, und Sie bieten mir Kämme an.

Ich biete Ihnen Kämme an, um Ihren Code für diejenigen, die Sie ansprechen, leicht lesbar zu machen (keine Böswilligkeit hier).

Um Ihre Quadrate richtig zu identifizieren, müssen Sie wissen, woher sie stammen, d. h. ob Sie sie gezeichnet haben oder ein Berater

Grund der Beschwerde: