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 1097

 
alvlaf:

O último código que você deu está um passo à frente - não abre nenhum negócio (portanto, a proibição está em vigor). Ainda não entendi porque não há nenhum. Em anexo, uma captura de tela do registro.

No início, a variável era chamada de ProfitableSerie e tinha função oposta. E eu tenho algo mais a acrescentar.

int OnInit()                     // abeiks && LRA: замечания приняты)))
{
   if (!GlobalVariableCheck("AllowNewOrders")) GlobalVariableSet("AllowNewOrders",1);
   return(INIT_SUCCEEDED);
}

// OnDeinit больше не нужен

void OnTick()
{
   if (CountTrades() == 0) // Количество ордеров должно равняться нулю
   {
      if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))
      || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL)))
      // Если последняя сделка убыточная, то открывается такая же, но с увеличенным лотом
      {
         GlobalVariableSet("AllowNewOrders", 0);
         Type = TypeLastHistOrder();
         if (Type == OP_BUY)  Price = Ask;
         if (Type == OP_SELL) Price = Bid;
         Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);
         ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
         return;
      }
      if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0) 
      // Если прибыль последней сделки равняется нулю, то открывается такая же
      {
         GlobalVariableSet("AllowNewOrders", 0);
         Type = TypeLastHistOrder();
         if (Type == OP_BUY)  Price = Ask;
         if (Type == OP_SELL) Price = Bid;
         Lot = NormalizeDouble(LotsLastHistOrder(), 2);
         ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
         return;
      }
      if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
      || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))
      || CountHistTrades() == 0)// Если последняя сделка прибыльная, то открывается ордер
      {
         if (GlobalVariableGet("AllowNewOrders") > 0) return;
         if (SignalBuy() && MaxOpenOrders > OrdersTotal())
         {
            ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic);
            if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);
            return;
         }
         if (SignalSell() && MaxOpenOrders > OrdersTotal())
         {
            ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);
            if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);
            return;
         }
      }
      GlobalVariableSet("AllowNewOrders", 1);
   }
}

Tente desta forma. Tenho a sensação de que algo mais surgirá...

 
Olá a todos, comecei a ler o tutorial MQL4 (quero aprender a programar), mas é uma versão antiga, o que aconselham a fazer? Ler o tutorial e depois a documentação?
 
LRA:
// ИХМО так нагляднее
De acordo!
 
linar:

Olá, comecei a ler o tutorial da MQL4 (quero aprender a programar), mas é uma versão antiga, o que você aconselharia a fazer?

Se você já programou em C, é melhor consultar o código fonte de indicadores livres, indicadores mais simples e Expert Advisors e ler a ajuda.

Se você não tiver programado nada, então... Se você não sabe nada de programação, então leia a documentação. )))

Há também um tutorial sobre este fórum: https://www.mql5.com/ru/forum/108883

 
A13ksandr:

É que no início a variável era chamada de ProfitableSerie e tinha a função oposta. E há algo mais a acrescentar.

Tente desta forma. Tenho a sensação de que algo mais surgirá...

Outro passo à frente - o bot abriu um ofício, mas é o fim dele. Nada mais se abre e não há sequer uma mensagem no diário de bordo sobre qualquer tentativa...
 
alvlaf:
Outro passo à frente - o bot abriu um negócio, mas foi o fim dele. O bot não abre mais nada e não há mensagens no log sobre qualquer tentativa.

Eu queria colocar apenas parte do código corretamente, mas depois copiei o código inteiro e não corrigi o erro. Deveria ser assim na última condição.

         if (GlobalVariableGet("AllowNewOrders") == 0) return;

Mas, na verdade, ele não deveria ter feito um único acordo então. Algumas das duas primeiras condições não estão funcionando corretamente. Consertar a condição por enquanto, vejamos :)

Atualização: trazer de volta o OnDeinit só por precaução.

void  OnDeInit()
{
   GlobalVariableSet("AllowNewOrders",1); 
} 
 
A13ksandr:

Droga, eu queria inserir apenas uma parte do código correto originalmente, mas depois copiei tudo e não corrigi este erro. Deve ser assim na última condição

Mas, na verdade, ele não deveria ter feito um único acordo então. Algumas das duas primeiras condições não estão funcionando corretamente. Consertar a condição por enquanto, vejamos :)

Atualização: trazer de volta o OnDeinit só por precaução.


Experimentei, após uma troca de menos começou a abrir uma posição em cada tick.
 
alvlaf:
Experimentei, após uma troca de menos começou a abrir uma posição em cada carrapato.

Colocar as duas primeiras condições na primeira linha

se(GlobalVariableGet("AllowNewOrders") == 1) voltar;

E tente o primeiro teste com um par.

A corretora GrandCapital?

 
A13ksandr:

Colocar as duas primeiras condições na primeira linha

se (GlobalVariableGet("AllowNewOrders") == 1) voltar;

E tente o primeiro teste com um par.

Corretora GrandCapital?

//----------------------------------------------------------------------
int OnInit()
{
se (!GlobalVariableCheck("AllowNewOrders")) GlobalVariableSet("AllowNewOrders",1);
return(INIT_SUCCEED);
}

//----------------------------------------------------------------------

nulo OnDeInit()
{
GlobalVariableSet("AllowNewOrders",1);
}
//----------------------------------------------------------------------

nulo OnTick()
{
se (GlobalVariableGet("AllowNewOrders") == 1) voltar;
{
se (CountTrades() == 0) // O número de pedidos deve ser igual a zero
{
if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELLL && PriceCloseLastHistOrder(OP_SELLL) > PriceOpenLastHistOrder(OP_SELLL))
// Se o último comércio estiver perdendo, o mesmo é aberto, mas com lote maior
{
GlobalVariableSet("AllowNewOrders", 0);
Tipo = TypeLastHistOrder();
se (Tipo == OP_BUY) Preço = Perguntar;
se (Tipo == OP_SELL) Preço = Licitação;
Lote = NormalizeDuplo(LotsLastHistOrder()*Multiplier, 2);
bilhete = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
retornar;
}
se (GlobalVariableGet("AllowNewOrders") == 1) voltar;
{
if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)
// se o lucro do último comércio for igual a zero, o mesmo comércio será aberto
{
GlobalVariableSet("AllowNewOrders", 0);
Tipo = TypeLastHistOrder();
se (Tipo == OP_BUY) Preço = Perguntar;
se (Tipo == OP_SELL) Preço = Licitação;
Lote = NormalizeDuplo(LotsLastHistOrder(), 2);
bilhete = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
retornar;
}
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELLL && PriceCloseLastHistOrder(OP_SELLL) < PriceOpenLastHistOrder(OP_SELLL))
|| CountHistTrades() == 0)// Se a última negociação for lucrativa, a ordem é aberta
{
se (GlobalVariableGet("AllowNewOrders") == 0) retornar;
if (SignalBuy() && MaxOpenOrders > OrderTotal())
{
bilhete = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic);
se (bilhete>0) GlobalVariableSet("AllowNewOrders", 0);
retornar;
}
if (SignalSell() && MaxOpenOrders > OrderTotal())
{
bilhete = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);
se (bilhete>0) GlobalVariableSet("AllowNewOrders", 0);
retornar;
}
}
}
GlobalVariableSet("AllowNewOrders", 1);
}
}

}

Sim, Grande Capital. Você colocou isso em ordem? Deixou de abrir novamente os negócios.

 

Rapazes, eu já estou com a cabeça no lugar. Como faço para que a EA faça pedidos pendentes em altas e baixas, por exemplo, 8 velas, com um take profit de 1/4.

Eu faço algo assim:

duplo Vhod1=iHighest(Symbol(),0,MODE_HIGH,8,0);

duplo Vhod2=iLowest(Symbol(),0,MODE_LOW,8,0);

duplo TP=((Vhod1-Vhod2)/4)+Vhod1;


Tentei mudar os parâmetros, mas continuo a fazer paradas erradas ou a fixar o preço em 7.00000; não está claro de onde vem

Razão: