Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 302

 
mavar:

Saúde! Hoje lancei a minha primeira EA em MT5!

Chegou a situação certa no mercado e o Expert Advisor começou a comprar e a comprar!!! Pelo menos consegui reagir a tempo. Pode dizer-me o que está errado no código? Pensei que deveria comprar apenas um lote e estabelecer imediatamente um Stop Loss and Take Profit. Assim que comprar algo, a variável Bye_opened deve tornar-se verdadeira e não deve permitir uma troca subsequente até que as paragens sejam accionadas. Além disso, como é que sei o preço da última transacção para lhe pôr fim?


Mas parece que fiz algo de errado. Por favor, assinale o meu erro.

Os bilhetes podem vir mais rapidamente do que a posição está na lista de posições em aberto. Portanto, o seu cheque

if(PositionSelect(_Symbol)==true)

não funcionará durante algum tempo, e durante esse tempo várias entradas irão passar. Assume-se que a peça de código acima está localizada no manipulador de carraças.

 
pako:

colocar este guião na pasta de guiões, abrir este guião num unitor, compilá-lo

Quando a troca se abre, arraste este guião para o gráfico

Obrigado pela ajuda, descobri eu mesmo, tudo funcionou.
 
Boa noite a todos, partilhem o código para a rede de arrasto. Obrigado.
 
PokrovMT5:
Boa noite a todos, por favor partilhem o código para a rede de arrasto. Obrigado.

Por favor use a pesquisa do site - não é difícil:https://www.mql5.com/ru/search#!keyword=%D1%82%D1%80%D0%B0%D0%BBB

 
barabashkakvn:

Por favor, use a pesquisa do site - não é difícil:https://www.mql5.com/ru/search#!keyword=%D1%82%D1%80%D0%B0%D0%BBB

Obrigado!
 
Dima_S:

Os bilhetes podem vir mais rapidamente do que a posição está na lista de abertos. Portanto, o seu cheque

não funcionará durante algum tempo, e durante este tempo haverá múltiplas entradas. Assume-se que a peça de código acima está localizada no manipulador de carraças.

Dima, o código está no bloco de processamento de carraças. Qual é a forma correcta de resolver este problema? Tive o mesmo problema no QuickBooks, o robô compra frequentemente mais do que deveria. Reduzi ao seu segundo atraso e simplesmente acrescentei uma variável separada que muda quando as condições são cumpridas, mas também aí teve alguns problemas. Por vezes a ordem era rejeitada pela bolsa e a variável já tinha o valor "deal" e o robô não negociava.


Como resolver correctamente o problema na MQL5, para que o robô compre um número especificado de lotes numa determinada condição e não compre mais do que o número especificado de lotes até ter vendido todos os lotes que comprou?

 

Devemos fazer uma pausa após a compra para esperar por uma resposta da troca, com certeza?

Dormir(1000); // Tem uma pausa?

 

Parar a perda não se move

escreve:

--Modificar encomenda -> preço aberto:1.3111 BID :1.3121 sl 1.3109
ordem de modificação falhada #3 limite de compra 1,00 a 1,31110 sl: 1,31080 tp: 0,00000 -> 1,31110, sl: 1,31090 tp: 0,00000 [Paragens inválidas]

--Modificar a ordem <- resultado:10016

Porquê?

void MoveStopLoss()
{
   ulong  ticket     = OrderGetTicket(0);
   double price      = OrderGetDouble(ORDER_PRICE_OPEN);
   double slossPrev  = OrderGetDouble(ORDER_SL);
   double sloss      = SymbolInfoDouble(_SYMBOL, SYMBOL_ASK) - SymbolInfoDouble(_SYMBOL, SYMBOL_POINT)*15;

      if (slossPrev < sloss)
      {
         MqlTradeRequest request={0};
         MqlTradeResult  result={0};
         request.action       = TRADE_ACTION_MODIFY;        // Тип выполняемого действия
         request.order        = ticket;                     // Тикет ордера (для модификации ордеров)
         request.price        = price;                      // Цена 
         request.sl           = sloss;                      // Уровень Stop Loss ордера
         request.tp           = 0;                          // Уровень Stop Loss ордера
         request.type_time    = ORDER_TIME_DAY;             // Тип ордера по времени действия
   
         Print ("--Modify order -> ", " price open:", price, " BID :", SymbolInfoDouble(_SYMBOL, SYMBOL_BID), " sl ", request.sl);
         bool ret = OrderSend (request, result);
         Print ("--Modify order <- результат:", result.retcode);      
      }
}
 
mq35:

Parar a perda não se move

escreve:

--Modificar encomenda -> preço aberto:1.3111 BID :1.3121 sl 1.3109
ordem de modificação falhada #3 limite de compra 1,00 a 1,31110 sl: 1,31080 tp: 0,00000 -> 1,31110, sl: 1,31090 tp: 0,00000 [Paragens inválidas]

--Modificar a ordem <- resultado:10016

Porquê?

Tentar normalizar o SL.
 

Normalizar não ajuda. A mesma coisa, a sop-loss não é puxada para cima

--Criar encomenda -> ASK:1.3121 preço:1.3111 sl 1.3106

limite de compra 1,00 EURUSD a 1,3111 (1,3121) sl: 1,3106 (1,3118 / 1,3121 / 1,3118)
--Criar encomenda <- resultado:10009

--Modificar encomenda -> preço aberto:1.3111 BID :1.3119 sl 1.3107
encomenda modificada [#3 limite de compra 1,00 EURUSD a 1,3111]

--Modificar a ordem <- resultado:10009

--Modificar encomenda -> preço aberto:1.3111 BID :1.312 sl 1.3108
encomenda modificada [#3 limite de compra 1,00 EURUSD a 1,3111]

--Modificar a ordem <- resultado:10009

--Modificar encomenda -> preço aberto:1.3111 BID :1.3121 sl 1.3109
ordem de modificação falhada #3 limite de compra 1,00 a 1,31110 sl: 1,31080 tp: 0,00000 -> 1,31110, sl: 1,31090 tp: 0,00000 [Paragens inválidas]
--Modificar a ordem <- resultado:10016