Quem pode ajudar com o robô, por que ele não está funcionando? - página 3

 
Para GIM
Se você quiser apenas abrir pedidos, então especifique 0 em vez de SL / TP. Se SL ou TP for 0, você terá que inserir 0 em seu pedido, e se você inserir um valor, você terá que calcular o preço pelo qual o pedido será fechado.
 
Dmitriy Gizlyk:
Para GIM
Se você quiser apenas abrir pedidos, então especifique 0 em vez de SL / TP. E para o futuro, você tem que verificar: se SL ou TP é 0, então você tem que especificar 0 no pedido. E se você especificar um valor, então calcule o preço de fechamento do pedido.
Gostaria que o Consultor Especialista abrisse e fechasse pedidos de acordo com o lucro total para todos os negócios....
 
AdikAmir:

Lotes duplos externos=0,1;
duplo FastMAPeriod=5;
método FastMAMethod=0; // 0-SMA, 1-EMA, 2-SMMA, 4-LWMA
externo int FastMAPrice=0; // 0-Close, 1-Aberto, 2-Alto, 3-Baixo, 4-Mediano, 5-Típico, 6-Peso
externo int SlowMAPeriod=75;
método SlowMAMethod=3; // 0-SMA, 1-EMA, 2-SMMA, 4-LWMA
externo int SlowMAPrice=3; // 0-Close, 1-Aberto, 2-Alto, 3-Baixo, 4-Mediano, 5-Típico, 6-Peso
externo int TP=500; //takeprofit
externo int SL=250; //stop loss
duplo tiquetaque;

int start(){

double fast_ma1=iMA(NULL,0,FastMAPeriod,0,FastMAPmethod,FastMAPrice,1);
double slow_ma1=iMA(NULL,0,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,1);
double fast_ma2=iMA(NULL,0,FastMAPeriod,0,FastMAPmethod,FastMAPrice,2);
double slow_ma2=iMA(NULL,0,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,2);

se (OrderTotal()==0)
{
if (fast_ma1>slow_ma1 && (fast_ma2<slow_ma2))
{ ticet = OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-SL*Point,Ask+TP*Point,NULL,0,0,CLR_NONE);
se (ticet==0) Imprimir("ERROR");
}
if (slow_ma1>fast_ma1 && (slow_ma2<fast_ma2))
{
ticet = OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid-SL*Point,Bid+TP*Point,NULL,0,0,CLR_NONE);
se (ticet==0) Imprimir("ERROR");
}

}

retorno(0);
}




Leia o diário de bordo. Talvez haja mensagens sobre erros que não foram detectados durante a compilação.

Há um erro aqui OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid-SL*Point,Bid+TP*Point,NULL,0,0,CLR_NONE);

você precisa fazer o seguinte OrderSend(Symbol(),OP_SELLL,Lots,Bid,Bid,3,Ask+SL*Point,Bid-TP*Point,NULL,0,0,CLR_NONE);

Quando você vende, o stop loss deve ser maior que o preço atual e tomar um menor. No seu caso, ao contrário, você coloca o stop abaixo do preço e toma um maior.

 
GIM:
Gostaria que o Consultor Especialista abrisse e fechasse pedidos por lucro total para todos os negócios....

Neste caso, ao abrir uma posição, colocar SL=0, TP=0.

Para fechar uma posição, precisamos comparar o lucro obtido com o valor definido em cada tick. E quando o lucro atinge o valor especificado, precisamos fechar todas as ordens no loop através do OrderClose(....).

Pode haver variações, dependendo da definição da tarefa do lucro atual. Se você olhar para o lucro da conta, você pode simplesmente considerar AccountProfit(), mas a maneira mais trabalhosa é provavelmente através de um loop (então podemos calcular o lucro somente para as ordens necessárias).

   double profit=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== /* Ваш магик */)
        {
         profit+=OrderProfit()+OrderSwap()+OrderCommission();
        }
     }
 
Dmitriy Gizlyk:

Neste caso, ao abrir uma posição, colocar SL=0, TP=0.

Para fechar uma posição, precisamos comparar o lucro obtido com o valor definido em cada tick. E quando o lucro atinge o valor especificado, precisamos fechar todas as ordens no loop através do OrderClose(....).

No que diz respeito à determinação do lucro atual, pode haver variações dependendo do conjunto de tarefas. Se você olhar o lucro por conta, você pode simplesmente considerar AccountProfit(), mas provavelmente a maneira mais trabalhosa é através de um ciclo (então você pode calcular o lucro somente para os pedidos necessários).

extern double  lots       = 0.01;
extern int  stop_loss      = 0;  
extern int take_profit    = 0;

int            last_bar       = 0;

int start(){
   if (last_bar == Bars) return(0);
   last_bar = Bars;
   if (OrdersTotal() == 0){
          OrderSend(Symbol(), OP_BUY, lots ,Ask, 50, Bid - stop_loss * Point, Ask + take_profit * Point,  "", 1, 0, clrBlue);
          OrderSend(Symbol(), OP_SELL, lots ,Bid, 50, Ask+ stop_loss * Point, Bid - take_profit * Point,  "", 1, 0, clrRed);      
}
   return(0); 
}
 double profit=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== /* Ваш магик */)
        {
         profit+=OrderProfit()+OrderSwap()+OrderCommission();
        }
     }
 
GIM:
Se o stoploss e o take profit estão na moeda do depósito
extern double  lots       = 0.01;
extern int  stop_loss      = 10;  /* Указываем в валюте депозита */
extern int take_profit    = 20;   /* Указываем в валюте депозита */
extern int Magic          = 1;

int            last_bar       = 0;

int start(){
   if (last_bar == Bars) return(0);
   last_bar = Bars;
   if (OrdersTotal() == 0){
          OrderSend(Symbol(), OP_BUY, lots ,Ask, 50, 0, 0,  "", Magic, 0, clrBlue);
          OrderSend(Symbol(), OP_SELL, lots ,Bid, 50, 0, 0,  "", Magic, 0, clrRed);      
}
 double profit=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== Magic)
        {
         profit+=OrderProfit()+OrderSwap()+OrderCommission();
        }
     }
 int requot=0;
 if(profit>=take_profit || (-profit)>=stop_loss)
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== Magic)
        {
         if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),50,clrRed))
               requot=0;
            else
              {
               requot++;
              }
         if(requot>10)
              {
               i++;
               requot=0;
              }
            i--;
        }
     }
   return(0); 
}
 
Dmitriy Gizlyk:
Se o stoploss e o take profit estiverem especificados na moeda do depósito

for(int i=0;i<OrdersTotal();i++)

Erro: "i".

 
Quem sabe?
extern int Magic          = 1;


что означает??
 
GIM:
Quem sabe

O identificador das ordens do Expert Advisor, de modo que ele só funciona com suas próprias ordens.

 
Vladimir Zubov:

O identificador das ordens do Expert Advisor, de modo que ele só funciona com suas próprias ordens.

O que você quer dizer, somente com seus próprios pedidos....
Razão: