[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 514

 

Salve,

Si prega di avere questa domanda sull'EA:

Ho un ordine che si apre con lo swing, per esempio, se MA_1 > MA_2 allora compriamo. Ma quando esco dal trade questa regola si attiva di nuovo.

Come posso dire all'EA di aprire una posizione solo se il prezzo si è spostato non più di 4 barre dalla MA_2?


Grazie!

Se qualcosa è sbagliato o posto sbagliato, non prendermi a calci. Questo è il mio primo post su questo enorme forum.

 
Jony5Proz:

Salve,

Si prega di avere questa domanda sull'EA:

Ho un ordine che si apre con lo swing, per esempio, se MA_1 > MA_2 allora compriamo. Ma quando esco dal trade questa regola si attiva di nuovo.

Come posso dire all'EA di aprire una posizione solo se il prezzo si è spostato non più di 4 barre dalla MA_2?


Grazie!

Se c'è qualcosa di sbagliato o posto sbagliato, non prendetemi a calci. Questo è il mio primo post su questo enorme forum.

https://book.mql4.com/ru/samples/expert
 

Grazie, sono solo a quel livello di conoscenza. C'è lo stesso problema con lo script dell'esempio. È scomodo quando si accende lo script e si inserisce alla fine della tendenza.

Come faccio a dire allo script di attivarsi solo se ci sono meno di 4 barre dopo l'incrocio di due barre?

 
https://www.mql5.com/ru/code/10773 ultima volta che faccio il bagno
 
Jony5Proz:

Grazie, sono solo a quel livello di conoscenza. C'è lo stesso problema con lo script dell'esempio. È scomodo quando si accende lo script e si inserisce alla fine della tendenza.

Come faccio a dire allo script di attivarsi solo se ci sono meno di 4 barre dopo l'incrocio di due barre?

Lo script non capisce le parole. È nelle tue mani - esegui lo script non più tardi di 4 barre dopo che 2 MA sono state attraversate.
 

Gente, ho già chiesto qui come far aprire un ordine solo quando appare una nuova candela. Sto usando un timeframe D1.

Ho deciso di piazzare ordini pendenti a certi livelli (buystop_lvl e sellstop_lvl), in base all'analisi delle candele precedenti.

Volevo piazzarli all'inizio della giornata e cancellarli quando arriva una nuova candela. Non importa se gli ordini pendenti sono stati attivati o meno, se sono stati attivati, allora anche gli ordini a mercato dovrebbero essere chiusi. Al massimo 2 ordini, buystop e sellstop.

Ecco cosa ho scritto:

1. Prima controllo se gli ordini a mercato o gli ordini pendenti sono attivi, e se lo sono, li cancello/chiudo.

int total=OrdersTotal();
   if (total!=0 && NewBar()==true){
                 for (int i=0; i<total; i++)
                    {
                     OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
                     if(OrderType()==OP_BUY)  OrderClose(OrderTicket(),OrderLots(),Bid,10);
                     if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,10);
                     if(OrderType()==OP_BUYSTOP)  OrderDelete(OrderTicket());
                     if(OrderType()==OP_SELLSTOP) OrderDelete(OrderTicket());
                    }
                }

2. Poi piazzo ordini pendenti in base ai livelli calcolati:

if(NewBar() == True && OrdersTotal()==0)
    {
     OrderSend(Symbol(),OP_BUYSTOP ,Lot,buystop_lvl ,10,buystop_SL ,buystop_TP,"Expert buystop\sellstop");
     Sleep(10000);
     OrderSend(Symbol(),OP_SELLSTOP,Lot,sellstop_lvl,10,sellstop_SL,sellstop_TP,"Expert buystop\sellstop");
     
    }

3. Se ho un ordine Sell o Sell Sell, aprirò una nuova barra su di esso:

//Функция нового бара
bool NewBar()
{
  static datetime lastbar = 0;
  datetime curbar = iTime(Symbol(),1440,0);
  if(lastbar != curbar)
  {
    lastbar = curbar;
    return(true);
  }
  else return(false);
}

Di conseguenza, quando si apre una nuova candela, gli ordini vengono piazzati e immediatamente cancellati. Gli ordini vengono piazzati e immediatamente cancellati.

Quando ho commentato il codice del punto (1) non sono riuscito a fargli aprire gli ordini nel tester, ma gli ordini non si sono aperti, cioè gli ordini non sono diventati a mercato.

Puoi dirmi quale potrebbe essere il problema?

 

Questa funzione NewBar() non può essere usata due volte di seguito

Qualcosa come questo è meglio:

bool newBar = NewBar();

// e più avanti nel testo, sostituendo NewBar() con newBar

 
Merda, non ho ancora capito come si fa. Ho bisogno del codice per cancellare e chiudere gli ordini solo sulla prossima candela. Ma ci saranno anche altri da aprire su di esso. Questo significa che il programma entrerà di nuovo nella cancellazione. Ho bisogno di qualche bandiera, ma il mio cervello sta già sudando per capire come fare :)
 
Noterday:
E in generale, si butta fuori NewBar, si guarda il tempo dell' ultima apertura dell 'ordine e lo si confronta con Time[0]. Se è più di questo, è il tuo caso, puoi cancellare tutto.
 
trend_lab:
In generale, si butta fuori NewBar, si guarda il tempo dell'ultima apertura dell'ordine e lo si confronta con Time[0]. Se è più di questo, è il tuo caso, puoi cancellare tutto.

Sì, credo che dovrò farlo. Grazie per questo :)
Motivazione: