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

 

Buona sera.

Potreste dirmi come aggiungere la chiusura di tutte le posizioni e la cancellazione di tutti gli ordini alla fine della settimana di trading?

Grazie!

 
Antonius:

Buona sera.

Potreste dirmi come aggiungere la chiusura di tutte le posizioni e la cancellazione di tutti gli ordini alla fine della settimana di trading?

Grazie!

Scrivi uno script del genere, poi buttalo sul grafico quando vuoi chiudere e cancella tutto. Questo è tutto...

Prego!

 
artmedia70:

Scrivi uno script del genere, poi buttalo sul grafico quando vuoi chiudere e cancella tutto. Il punto è...

Ma per favore!



Grazie:) Chiarire la richiesta.

Abbiamo bisogno di aggiungere del codice all'EA che chiuderà tutti gli ordini e le posizioni alla fine della settimana di trading.

Potresti per favore scrivere questo codice?

 
Antonius:


Grazie:) Chiarire la richiesta.

Abbiamo bisogno di aggiungere del codice all'EA che chiuderà tutti gli ordini e le posizioni alla fine della settimana di trading.

Potresti per favore scrivere questo codice?

Posso farlo. Nessun problema. Hai mai fatto qualcosa da solo? Questo thread non è per ottenere roba gratis, ma per aiutare le persone che stanno cercando di codificare da sole.
 
artmedia70:
Posso farlo. Nessun problema. Hai mai fatto qualcosa da solo? Questo thread non riguarda l'ottenere qualcosa di pronto gratuitamente, ma l'aiutare coloro che stanno cercando di codificare da soli.


Ho controllato su https://book.mql4.com/ru/trading/orderclose.

Cercato su google, sul forum. Non ne ho trovati. Forse sto scrivendo male la domanda.

Ho pensato di chiedere nel thread dei nuovi arrivati.

 

Come faccio a prescrivere?

Mentre si esegue lo script:

Si apre una finestra con le schede "generale" e "parametri di input".

Ho bisogno di inserire una data nei parametri di input.

È possibile che quando eseguo lo script, si apre una casella della data, inserisco la data, clicco su ok e tutto funziona?

E posso fare in modo che lo script ricordi l'ultima data che ho inserito?

 
artmedia70:

La funzione che determina l'ultima posizione chiusa sullo stop ha il tipo bool, mentre tu stai cercando di restituire da essa il tipo double. Di conseguenza, restituisce o 0 o 1.

Vi ho scritto che dovreste aggiungere il passaggio di una variabile per riferimento:

Ora controlla l'ultimo Buy, per esempio:

Come questo...


Grazie mille.
 
artmedia70:

La funzione che determina l'ultima posizione chiusa sullo stop ha il tipo bool, mentre tu stai cercando di restituire da essa il tipo double. Di conseguenza, restituisce o 0 o 1.

Vi ho detto che dovreste aggiungere il passaggio di una variabile per riferimento:

Ora controlla l'ultimo Buy, per esempio:

Come questo...


Ho fatto tutto come hai detto tu. Tutto compilato...... ma la funzione non funziona quando si prova advisor..... tutte le posizioni advisor apre 0,1 lotto.

double  Magic, Lot;

int start()
  {
        

  
 double Price=iOpen (Symbol (),0,0);
 

          
 int last_order_bar = 0;                                                                                                                        
 int ot = OrdersTotal();                                                                                                                        
                                                                                                                        
 if (ot>0) //если есть ордера в рынке                                                                                                                   
 {                                                                                                                      
   if (OrderSelect (ot-1,SELECT_BY_POS))                                                                                                                        
      if (OrderType ()==OP_BUY || OrderType ()==OP_SELL )                                                                                                                       
         last_order_bar = iBarShift (Symbol (),0,OrderOpenTime ());                                                                                                             
 }                                                                                                                      
                                                                                                                        
 int last_hist_order_bar = 0;                                                                                                                   
 int oht = OrdersHistoryTotal();                                                                                                                        
                                                                                                                
 if (oht>0)                                                                                                                     
 {                                                                                                                      
   if (OrderSelect (oht-1,SELECT_BY_POS, MODE_HISTORY))                                                                                                                         
      if (OrderType ()==OP_BUY || OrderType ()==OP_SELL)                                                                                                                        
         last_hist_order_bar = iBarShift (Symbol (),0,OrderOpenTime ());
                                                                                                        
        }

                                                                                                        
if (ot==0)

 if (Bid ==Price)
//=============================================================== 
  
if(((Open[1]-Close[1])>100*Point)&&((Open[1]-Close[1])<120*Point))
if(((High[1]-Open[1])>40*Point)&&((High[1]-Open[1])<60*Point))
if(((Close[1]-Low[1])>40*Point)&&((Close[1]-Low[1])<60*Point))

//============================================================
                                                                           // задавать минимальное значение лота я не стал,мне кажется для тестера это не обязательно
if (isCloseLastPosByStop(Symbol(), OP_BUY, Magic, Lot))                        
{
Lot=Lot*2;
OrderSend(Symbol(),OP_SELL,Lot,Bid,1,Ask+1500*Point,Ask-300*Point,"jfh",123 );
}
else
{

Lot=0.1;        
OrderSend(Symbol(),OP_SELL,1,Bid,Lot,Ask+1500*Point,Ask-300*Point,"jfh",123 );
}
   return(0);
  }
//============================================================  
bool isCloseLastPosByStop(string sy, int op, int mn, double ll)       //у Вас перед названием формального  параметра  11 стоял знак &- я его убрал.
{
   double   pt;
   datetime t;                                                       //у вас тип переменной t был int - я сделал datetime
   int       dg, i, j=-1, k=OrdersHistoryTotal()-1;

   for (i=k; i>=0; i--) 
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) 
     {
         if (OrderMagicNumber()!=mn)   continue;   // если магик не тот, переходим к следующему
         if (OrderSymbol()!=sy)        continue;   // если символ не тот, переходим к следующему
         if (OrderType()!=op)           continue;   // если тип не тот, переходим к следующему
         if (t<OrderCloseTime()) 
         {
            t=OrderCloseTime();
            j=i;
            }
         }
      }
      
   if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) 
   {
      dg=MarketInfo(OrderSymbol(), MODE_DIGITS);      // количество знаков в цене символа ордера
      pt=MarketInfo(OrderSymbol(), MODE_POINT);       // размер пункта инструмента в валюте котировки ордера
      if (MathAbs(OrderClosePrice()-OrderStopLoss())< 0.5*pt) // Если закрыт по стопу
      { 
         ll=OrderLots();                              // записываем количество лотов в ордере, закрытом по стопу
         return(true);                                // возвращаем истину
         }
      }
      
   return(False);                                     // возвращаем ложь (позиции нету, либо не по стопу)
}

Per favore, ditemi qual è il mio errore.

Non capisco questo punto - come avete notato correttamente la funzione restituisce il valore di tipo bool, ma nella chiamata di funzione, in cui la funzione deve mettere il valore di tipo bool.

Avete suggerito di specificare altri tipi di valori.

Grazie.

 
solnce600:

Ho fatto tutto come hai detto tu. Tutto si compila...... ma la funzione non funziona quando si testa l'EA..... tutte le posizioni l'EA apre 0,1 lotti.

Potreste dirmi qual è il mio errore?

Non capisco questo momento - come hai notato correttamente la funzione restituisce un valore di tipo bool, ma nella chiamata di funzione, in cui la funzione dovrebbe mettere un valore di tipo bool

Suggerite di specificare altri tipi di valori.

Grazie.


bool isCloseLastPosByStop(string sy, int op, int mn, double ll)       //у Вас перед названием формального  параметра  11 стоял знак &- я его убрал.

Perché l'hai rimosso. Se l'avessi lasciato, tutto avrebbe funzionato.

 
Vinin:

Perché rimuoverlo. Se l'avessero fatto, tutto avrebbe funzionato

Mi chiedo ..... cosa significhi quel segno.... Non mi viene in mente nulla nel libro di testo al riguardo.