Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1552

 
законопослушный гражданин:

as corujas devem abrir negócios de acordo com seu algoritmo

se parar, então o próximo comércio com um martin, e assim por diante até o número de multiplicações que especifiquei (função -OrderClose = .....;).

Além disso, se a coruja for desativada junto com o terminal, basta pressionar o botão de "auto-comércio" com outra coruja, então o próximo comércio começará com o lote inicial, não com o último aumentado por um martingale.

Também seria bom anexar-lhe um cronograma, mas esta idéia só agora me ocorreu.

Por exemplo: foi ativado às 10-00 na segunda-feira com o lote inicial, depois foi desligado durante o dia quando algum resultado foi alcançado, e na terça-feira de manhã foi ativado às 10-00 e começou com o lote inicial novamente.

tudo.

como lidar com esta questão até o fim?

 
законопослушный гражданин:

como você chega ao fundo desta questão?

Você responde, você responde,

mas você desaparece e depois volta a ter as mesmas perguntas.

 
MakarFX:

você responde, você responde,

mas você desaparece e depois volta a ter as mesmas perguntas.

Você me mostrou para criar uma variável global, eu a tentei, mas depois tenho uma pergunta

ainda não sou bom nisso. já tenho uma data/hora de abertura; - devo substituí-la poruma data/hora deinício ou em adição?

"e depois, se não houver ordens abertas/fechadas mais tarde "Start "Lots=Lot;"- não está nada claro aonde se referir?

Em seguida, você pediu uma breve descrição da lógica da coruja, o que eu quero dela.

sua pergunta sobre como reinicializar automaticamente o lote no desligamento ainda não foi respondida.

 
законопослушный гражданин:

Você me mostrou para criar uma variável global, eu a tentei, mas depois tenho uma pergunta

ainda não sou bom nisso. já tenho datatime OpenTime; - devo substituí-lo pordatatimeStart ou em adição?

"e depois, se não houver ordens abertas/fechadas mais tarde "Start "Lots=Lot;"- não está nada claro aonde se referir?

Em seguida, você pediu uma breve descrição da lógica da coruja, o que eu quero dela.

Quando perguntei como fazer o reset automático do lote no desligamento, não obtive resposta.

Quando pedi uma descrição da lógica da EA, não me referia ao problema encontrado, mas às ações gerais

por exemplo:

se houver um sinal, abrimos uma ordem

se o pedido fechar com lucro, vamos esperar por um novo sinal

se o pedido fechar com uma perda, então aumente o lote e espere por um novo sinal


Não preciso de sua estratégia, só preciso entender o que a EA deve fazer.

 
законопослушный гражданин:

Você me mostrou para criar uma variável global, eu a tentei, mas depois tenho uma pergunta

ainda não sou bom nisso. já tenho datatime OpenTime; - devo substituí-lo pordatatimeStart ou em adição?

"e depois, se não houver ordens abertas/fechadas mais tarde "Start "Lots=Lot;"- não está nada claro aonde se referir?

Em seguida, você me pediu para descrever brevemente a lógica da coruja, o que eu quero dela.

Não obtive resposta à minha pergunta sobre como fazer o reset automático do lote no desligamento.

Aqui está a função para os iniciantes:

//+----------------------------------------------------------------------------+
//|  Размер лота/профита и время последней закрытой позиции                    |
//|  1 - возвращает размер лота                                                |
//|  2 - возвращает размер профита с учетом комиссии и свопа                   |
//|  3 - возвращает время закрытия ордера                                      |
//+----------------------------------------------------------------------------+
double GetInfoLastPos(int a=1)
  {
   datetime t=0;
   double result=0,l=0,p=0;
   int i=OrdersHistoryTotal();

   for(int pos=0; pos<i; pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if((OrderSymbol()==_Symbol)&&(OrderMagicNumber()==Magic))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime()) {t=OrderCloseTime(); l=OrderLots(); p=OrderProfit()+OrderCommission()+OrderSwap();}
              }
           }
        }
     }
   if(a==1) {result=l;} else
   if(a==2) {result=p;} else
   if(a==3) {result=(double)t;}
   else     {result=0;}
   return(result);
  }

se uma ordem está com prejuízo

   if(GetInfoLastPos(2)<0)
     {Lots=NormalizeDouble(GetInfoLastPos(1)*K_Martin,DigitsLot);}
   else 
     {Lots=NormalizeDouble(Lot,DigitsLot);}
 

Em relação a

datetime Start;

int OnInit()
{
   Start=TimeCurrent();
.....................
}
void OnTick()
{
   if (!IsTradeAllowed()) 
   {
      DrawLABEL("Торговля",0,0,0,Red,"Торговля запрещена");
      Start=TimeCurrent();
      return;
   } 
.....................
}

se a hora da última ordem fechada for menor que a hora de início do assessor

   if(GetInfoLastPos(3)<Start)
     {Lots=NormalizeDouble(Lot,DigitsLot);}
 
MakarFX:

Quando pedi uma descrição da lógica da EA, não estava me referindo ao problema encontrado, mas a ações gerais

por exemplo:

se houver um sinal, abrimos uma ordem

se o pedido fechar com lucro, vamos esperar por um novo sinal

se o pedido fechar com uma perda, então aumente o lote e espere por um novo sinal


Não preciso de sua estratégia, só preciso entender o que a EA deve fazer.

se houver um sinal, então abrimos um pedido com o primeiro lote

se o pedido for fechado com lucro, esperaremos por um novo sinal

se o pedido fechar com uma perda, então aumente o lote e espere por um novo sinal

se o lucro atingir xxxx(na moeda do depósito), o consultor fecha todos os negócios e redefine o lote para o lote inicial

se a perda chegar ao yuu (na moeda do depósito) o consultor fecha todos os negócios e redefine o lote para o inicial

se o assessor foi desligado e depois ligado novamente - se houver um sinal, abrimos uma ordem com o lote inicial

certo?

 
законопослушный гражданин:

se houver um sinal, abrimos um pedido com um lote inicial

se o pedido for fechado com lucro, esperamos por um novo sinal

Se o pedido fechar com uma perda, então aumente o lote e espere por um novo sinal

se o lucro atingir xxxx(na moeda do depósito), o consultor fecha todos os negócios e redefine o lote para o lote inicial

se a perda chegar ao yuu (na moeda do depósito) o consultor fecha todos os negócios e redefine o lote para o inicial

se o assessor foi desligado e depois ligado novamente - se houver um sinal, abrimos uma ordem com o lote inicial

como esta?

Sim, assim.

E se a EA foi desativada e depois habilitada novamente, e há uma ordem em aberto?

 
MakarFX:

Sim, é.

E se a EA for desligada e depois ligada novamente e houver uma ordem em aberto?

Se a EA é desligada, então antes de ser desligada, ela fecha todas as ordens abertas, independentemente de estarem em lucro ou prejuízo,

Quando a coruja for ligada novamente, o "campo em branco", o lote inicial, será fechado.

O indicador que dá um sinal para abrir, no exemplo foi o RSI, mas suponho testar três corujas diferentes em indicadores diferentes.

Portanto, se eu tiver um código de exemplo para a lógica acima, espero ser capaz de retrabalhar outros códigos da EA, eles são de código aberto e estão disponíveis gratuitamente.

 
законопослушный гражданин:

Se as corujas são deslig adas, então antes de serem desligadas, elas fecham todas as ordens abertas, independentemente de estarem com lucro ou prejuízo,

O indicador que dá os sinais para abrir era o RSI, mas presumo que tenha sido liberado.

O indicador que dá um sinal para abrir, no exemplo foi o RSI, mas suponho testar três corujas diferentes em indicadores diferentes.

Portanto, se eu tiver um código de exemplo para a lógica acima, espero ser capaz de retrabalhar outros códigos de EAs eu mesmo, espero que eles sejam de código aberto e estejam disponíveis gratuitamente.

e coruja se desliga quando você muda o cronograma, problemas de comunicação e 100500 e mais um motivo...

a EA tem que ser reiniciada porque é a essência natural da EA