Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1347
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
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.
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
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
Grazie!
Non c'è di che)
Potreste dirmi come correggere l'errore?
Qui c'è un errore
Levariabili di ingresso non possono essere cambiate.
Si può fare così:
Non c'è di che)
levariabili di input non possono essere cambiate.
Si può fare così:
Grazie, ho capito.
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