Domande e risposte ai programmatori su MQL 4 - pagina 6

 
Il codice è complicato o c'è qualcosa di più semplice?
 

1. Memorizza i biglietti d'ordine in un array o 2 variabili.

2. Selezionateli uno per uno con OrderSelect (l'array è più conveniente qui).

3. Controlla il tipo per il momento attuale.

4. Se tipo OP_BUY || OP_SELL -> OrderDelete per il secondo biglietto.

 

Per favore, aiutatemi con un esempio semplice, capisco molte cose, ma l'ordine di selezione è un po' un casino!

 

Ecco il codice dove l'errore è ????? Non cancella il secondo ciondolo quando un ciondolo attiva ......


se (MA1<MA2)
{
se(n==0)
{
//==================================================================================================================//

tiket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slip,slb,tpb,NULL,MagicNumber,0,CLR_NONE);
if(tiket<0) Alert("Error # - ",GetLastError()," On instrument ", Symbol()); //write error//
//================================================================================================================//
t2 = OrderSend(Symbol(), OP_BUYSTOP, Lots*Overlot,OtkrBS, Slip,0,tpb, 0, MagicNumber,expiration);
//================================================================================================================//
t1 = OrderSend(Symbol(), OP_SELLSTOP, Lots*Overlot+1,OtkrSS,Slip,0,slb, 0, MagicNumber,expiration);
//================================================================================================================//

//==================================================================================================================//
}
//==================================================================================================================//
else
//=================================================================================================================//
se (MA1>MA2)
{
tiket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slip,sls,tps,NULL,MagicNumber,0,CLR_NONE);
if(tiket<0) Alert("Error # - ",GetLastError()," On instrument ", Symbol()); //write error//
//================================================================================================================//
t2 = OrderSend(Symbol(), OP_BUYSTOP, Lots*Overlot+1,OtkrSS1,Slip,0,sls, 0, MagicNumber,expiration);
//================================================================================================================//
t1 = OrderSend(Symbol(), OP_SELLSTOP, Lots*Overlot, OtkrBS1,Slip,0,tps, 0, MagicNumber,expiration);
//================================================================================================================//
}
//==================================================================================================================//
// se SELLSTOP è scattato, cancella BUYSTOP
if(OrderSelect(t1, SELECT_BY_TICKET))
{
if(OrderType()==OP_SELL)
{
OrderDelete(t2);
}
}
//----
// se BUYSTOP è scattato, cancella SELLSTOP
if(OrderSelect(t2, SELECT_BY_TICKET))
{
if(OrderType()==OP_BUY)
{
OrderDelete(t1);
}
}

 

Sei confuso sulle condizioni. Credo che tu abbia le parentesi {} nel posto sbagliato:

if ( n == 0 )
{
        if (MA1<MA2) 
        {
                //==================================================================================================================//

                tiket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slip,slb,tpb,NULL,MagicNumber,0,CLR_NONE); 
                if(tiket<0) Alert("Ошибка № - ",GetLastError()," На инструменте ", Symbol()); //пишет ошибку// 
                //================================================================================================================//
                t2 = OrderSend(Symbol(), OP_BUYSTOP, Lots*Overlot,OtkrBS, Slip,0,tpb, 0, MagicNumber,expiration);
                //================================================================================================================//
                t1 = OrderSend(Symbol(), OP_SELLSTOP, Lots*Overlot+1,OtkrSS,Slip,0,slb, 0, MagicNumber,expiration);
                //================================================================================================================//

                //==================================================================================================================//
        }
        //==================================================================================================================// 
        else 
        //=================================================================================================================// 
        if (MA1>MA2) 
        {
                tiket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slip,sls,tps,NULL,MagicNumber,0,CLR_NONE);
                if(tiket<0) Alert("Ошибка № - ",GetLastError()," На инструменте ", Symbol()); //пишет ошибку//
                //================================================================================================================//
                t2 = OrderSend(Symbol(), OP_BUYSTOP, Lots*Overlot+1,OtkrSS1,Slip,0,sls, 0, MagicNumber,expiration);
                //================================================================================================================//
                t1 = OrderSend(Symbol(), OP_SELLSTOP, Lots*Overlot, OtkrBS1,Slip,0,tps, 0, MagicNumber,expiration);
        //================================================================================================================//
        }
}
//==================================================================================================================//
// если сработал SELLSTOP удаляем BUYSTOP
if(OrderSelect(t1, SELECT_BY_TICKET))
{
        if(OrderType()==OP_SELL)
        {
                OrderDelete(t2);
        }
}
//----
// если сработал BUYSTOP удаляем SELLSTOP
if(OrderSelect(t2, SELECT_BY_TICKET))
{
        if(OrderType()==OP_BUY)
        {
                OrderDelete(t1);
        }
}

O qualcosa del genere.

 
non ha funzionato purtroppo........
 

Quello che è sorprendente è che ho un EA simile. Ho controllato tutto con questo, è tutto uguale in linea di principio. Funziona, e questo no...

La differenza è che l'altro EA ha solo una posa per l'entrata in acquisto e due pendenti.

 

biglietti nelle variabili globali? (al di fuori dell'avvio e di altre funzioni)

In caso contrario, vengono resettate ad ogni tick.

Inserite più Print()-s ad ogni passo dell'Expert Advisor, poi capirete dove si blocca e cosa non fa.

 

URRÀ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Vincitore !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 
hasayama:

biglietti nelle variabili globali? (al di fuori dell'avvio e di altre funzioni)

In caso contrario, vengono resettate ad ogni tick.

Inserite più Print()-s ad ogni passo dell'Expert Advisor, poi capirete dove si blocca e cosa non fa.

Ti sono follemente grato, mi è sfuggito il punto che ho dichiarato i biglietti come doppi all'inizio e l'ordine non può essere registrato come 1.0 e 2.0. Ecco perché la funzione di cancellazione stava aspettando la virgola mobile
Motivazione: