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

 


Salve, potreste aiutarmi per favore - ho un problema: il robot entra in una posizione e al prossimo tick modifica il suo stop-loss al minimo precedente e ho bisogno che lo stop-loss sia modificato solo quando la candela si chiude su cui la posizione è stata aperta

void TrailingStop()
{  
  for(int i=0;i<OrdersTotal();i++)
  {
  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true);
    {
    if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
      {  
      if (OrderType()==OP_BUY)             
        {              
            double LOW_1 = iLow(NULL,0,1);       
            bool res=OrderModify(OrderTicket(),OrderOpenPrice(),LOW_1,OrderTakeProfit(),0,White);                
            if(!res)  Print("Ошибка модификации ордера. Код ошибки=",GetLastError());         
        }               
       if (OrderType()==OP_SELL)              
        {                  
            double HIGH_1 = iHigh(NULL,0,1);                    
            res=OrderModify(OrderTicket(),OrderOpenPrice(),HIGH_1,OrderTakeProfit(),0,White);                
            if(!res)  Print("Ошибка модификации ордера. Код ошибки=",GetLastError());          
        }                      
      }
    } 
  }     
 return;                   
}
 

o come sbarazzarsi di questo errore


 
remjte:
Signori! Puoi dirmi il codice che fermerà il test di un EA quando non c'è abbastanza margine per aprire una posizione?
Grazie!
Se AccountFreeMarginCheck() è inferiore a un certo valore (ad esempio meno del 50% di AccountFreeMargin) - uscire dalla funzione di trading, il test termina rapidamente perché i cicli vuoti sono quasi scaricabili.
 
evillive:
Se AccountFreeMarginCheck() è inferiore a un certo valore (per esempio, meno del 50% di AccountFreeMargin) - uscire dalla funzione commerciale, il test termina rapidamente, perché i cicli vuoti quasi non si caricano.

Onestamente, ancora molto verde, ha trovato questo pezzo di codice può dirmi come correggere

se (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= 0,0) return (-1);
if(GetLastError() == 134/* NOT_ENOUGH_MONEY */) return (-2);
return (l_lots_4);

 
In parole più semplici: come scrivo questa condizione - Non modificare un ordine aperto finché non appare una nuova candela?
 
zhezheria:
Lasciatemi scrivere in modo più semplice: come scrivere questa condizione - Non modificare un ordine aperto finché non appare una nuova candela
Lavorare sull'apertura di una nuova barra in un lasso di tempo corrispondente. Un sacco di esempi di codice
 
remjte:

Onestamente, ancora molto verde, ha trovato questo pezzo di codice può dirmi come correggere

se (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= 0,0) return (-1);
if (GetLastError() == 134/* NOT_ENOUGH_MONEY */) return (-2);
return (l_lots_4);

Non c'è bisogno di modificarlo, andrà benissimo. A meno che tu non sostituisca le variabili con i tuoi nomi.

Ma se abbiamo bisogno di meno rischio, allora se (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= AccountFreeMargin()*0.5) return (-1); - in questo caso, se il 50% o meno di denaro libero rimane dopo che la posizione è aperta con il lotto specificato, allora return (-1)

 
Puoi darmi un suggerimento, per favore? Ho bisogno di scrivere una parte di codice dove il secondo ordine nella lista sarà selezionato e poi cancellato (in attesa). Restituisce 4051 quando OrderSelect(1, SELECT_BY_POS, MODE_TRADES)
 
remjte:
Signori! Puoi dirmi il codice che fermerà il test di un EA quando non c'è abbastanza margine per aprire una posizione?
Grazie!
      // проверяем доступность свободных средств
      if(AccountFreeMarginCheck(Symbol(),OP_BUY,OpenLot)<=0 || GetLastError()==134)
            {
               Print("It is impossible to open the order Buy, not enough money.");
               return(0);
            }
      // проверяем доступность свободных средств
      if(AccountFreeMarginCheck(Symbol(),OP_SELL,OpenLot)<=0 || GetLastError()==134)
            {
               Print("It is impossible to open the order Sell, not enough money.");
               return(0);
            }
doube OpenLot; // Лот который вы хотите открыть.
Inseritelo prima di aprire un ordine a mercato.
 
Pomid:
Puoi darmi un suggerimento, per favore? Ho bisogno di scrivere una parte di codice dove il secondo ordine nella lista sarà selezionato e poi cancellato (in attesa). Restituisce 4051 quando OrderSelect(1, SELECT_BY_POS, MODE_TRADES)
Il conteggio degli ordini parte da 0. Prova, OrderSelect(0, SELECT_BY_POS, MODE_TRADES)
Motivazione: