Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1347

 

Non riesco a finire l'Expert Advisor. L'essenza è semplice - prima disegno un rettangolo, che è un trigger di acquisto, nel caso in cui il prezzo entra nella sua area, poi disegno il secondo - quando il prezzo ci arriva, l'affare dovrebbe essere chiuso.

Ma accade il contrario - il prezzo inizia ad aprirsi e chiudersi all'interno dell'area. Cosa sto facendo di sbagliato?


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

//| RECTANGLES OP_BUY.mq4 |

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

#proprietà copyright ""

#proprietà link ""

#proprietà versione "1.00"

#proprietà rigorosa


extern int Magic = 777701;

extern double Lot = 0,01;

extern int Slippage = 3;



biglietto int;

int OrderOfSymbol;




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

//| Funzione di inizializzazione dell'esperto |

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

int OnInit()

{

//---

return(INIT_SUCCEED);

}

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

//| Funzione di deinizializzazione dell'esperto |

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

void OnDeinit(const int reason)

{

//---

}

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

//| funzione tick esperto |

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

void OnTick()

{

//---

//Controlla se c'è un rettangolo:

se(ObjectsTotal(OBJ_RECTANGLE)==0)

{Commento("Disegna un rettangolo per aprire una compravendita!");}


//ottenere il NOME del rettangolo:

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

{

stringa name=ObjectName(n);

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

se (OrderOfSymbol<1)

se (Close[1]>Open[1])

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

Bid < p1a && Bid > p2a )

{

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

}

}

}

//Controlla se c'è già un secondorettangolo:

se(ObjectsTotal(OBJ_RECTANGLE)==1)

{Commento("Disegna un secondo rettangolo per chiudere la compravendita!");}


//ottenere il NOME del rettangolo:

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

{

stringa name=ObjectName(n);

se(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 &&

Offerta < p1b && Offerta > p2b )

ChiudereBuyPositions1();

}

}

//Controlla se c'è già un 2° rettangolo:

se(ObjectsTotal(OBJ_CHANNEL)==2)

{Comment("Le aree di apertura e chiusura dell'ordine di acquisto sono impostate - il trade è attivo!");}


}

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

void ChiudereAcquistoPosizioni1()

{

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

if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

if(OrderMagicNumber() == Magic)

se(OrderSymbol() == Symbol())

{



if(OrderType()==OP_BUY)

{

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

}

}

}

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

//| Conteggio degli ordini

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

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

if(OrderSymbol()!=_Symbol) continua;

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

}

//----

ritorno(cnt);

}

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

C'è una funzione per postare codice come questo, renderà più facile per tutti leggere il tuo codice per aiutare.

 
MakarFX:

C'è una funzione per postare codice come questo, sarebbe più facile per tutti leggere il tuo codice per aiutare.

Non lo aiuterà. Le righe vuote vengono lette solo da persone come lui.

 

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

Cosa sto facendo di sbagliato?

Non c'è unicità nel nome della piazza, avete qualsiasi piazza come condizione per comprare e vendere

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

Questo vi aiuterà anche


 

Si prega di consigliare come correggere l'errore

//+------------------------------------------------------------------+
#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);
  }
//+------------------------------------------------------------------+

Ecco l'errore

'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:

Grazie!

Non c'è di che)

MakarFX:

Potreste dirmi come correggere l'errore?

Qui c'è un errore

Levariabili di ingresso non possono essere cambiate.

Si può fare così:

input ENUM_BASE_CORNER  CornerInfo     = CORNER_RIGHT_UPPER; 

ENUM_BASE_CORNER  MyCornerInfo     = CornerInfo; 


.......

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



 
Aleksei Stepanenko:

Non c'è di che)

levariabili di input non possono essere cambiate.

Si può fare così:

Grazie, ho capito.

 
MakarFX:

Questo aiuterà anche voi.


Non l'ha fatto. E mi sono reso conto che i valori quadrati non sono presi da due come dovrebbero essere, ma dall'ultimo. Non so come batterlo. Non l'avrei capito da solo. Non sono fluente in mql, è per questo che te lo chiedo qui e tu mi offri i pettini.

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

non ha aiutato. E mi sono reso conto che i valori quadrati non sono presi da due come dovrebbero essere, ma dall'ultimo. Non so come batterlo. Io stesso non l'avrei mai detto. Non sono fluente in mql, per questo lo chiedo a te e tu mi offri i pettini.

Vi offro dei pettini per rendere il vostro codice facile da leggere per coloro a cui vi rivolgete (nessuna malizia qui).

Per quanto riguarda i tuoi quadrati, per identificarli correttamente devi capire la loro origine, cioè tu li disegni o un consulente

Motivazione: