Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 810

 


Olá, você poderia me ajudar por favor - eu tenho um problema: o robô entra em uma posição e no próximo tick ele modifica seu stop-loss para o baixo anterior e eu preciso que esse stop-loss seja modificado somente quando a vela se fecha na qual a posição foi aberta

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;                   
}
 

ou como se livrar deste erro


 
remjte:
Cavalheiros! Você pode me dizer o código que vai parar de testar uma EA quando não há margem suficiente para abrir uma posição?
Obrigado!
Se AccountFreeMarginCheck() for inferior a um determinado valor (por exemplo, menos de 50% da AccountFreeMargin) - função de saída de negociação, o teste termina rapidamente porque os loops vazios são quase descarregáveis.
 
evillive:
Se AccountFreeMarginCheck() for inferior a um determinado valor (por exemplo, menos de 50% da AccountFreeMargin) - saída da função de comércio, o teste termina rapidamente, pois os laços vazios quase não estão carregando.

Honestamente, ainda muito verde, você pode me dizer como corrigir este pedaço de código?

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

 
Em palavras mais simples: Como escrever esta condição - Não modificar uma ordem aberta até que uma nova vela apareça?
 
zhezheria:
Deixe-me escrever de uma maneira mais simples: como escrever esta condição - Não modifique uma ordem aberta até que apareça um novo castiçal
Trabalhar na abertura de um novo bar em um período de tempo correspondente. Muitos exemplos de códigos
 
remjte:

Honestamente, ainda muito verde, você pode me dizer como corrigir este pedaço de código?

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

Não é preciso editá-lo, ele vai se sair bem. A menos que você apenas substitua as variáveis por seus próprios nomes.

Mas se precisarmos de menos risco, então se (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= AccountFreeMargin()*0.5) retornar (-1); - neste caso, se 50% ou menos de dinheiro livre permanecer após a abertura da posição com o lote especificado, então retornar (-1)

 
Você pode me dar uma dica, por favor? Preciso escrever uma parte do código onde a segunda ordem da lista será selecionada e depois excluída (pendente). Retorna 4051 quando OrderSelect(1, SELECT_BY_POS, MODE_TRADES)
 
remjte:
Cavalheiros! Você pode me dizer o código que vai parar de testar uma EA quando não há margem suficiente para abrir uma posição?
Obrigado!
      // проверяем доступность свободных средств
      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; // Лот который вы хотите открыть.
Insira isto antes de abrir uma ordem de mercado.
 
Pomid:
Você pode me dar uma dica, por favor? Preciso escrever uma parte do código onde a segunda ordem da lista será selecionada e depois excluída (pendente). Retorna 4051 quando OrderSelect(1, SELECT_BY_POS, MODE_TRADES)
A contagem do pedido começa a partir de 0. Try, OrderSelect(0, SELECT_BY_POS, MODE_TRADES)
Razão: