Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 276
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
ZeroMemory (...) inicializa array do tipo string com valor NULL
Boa tarde. Aqui está a questão. Escrito um EA, anexado a ele um trailing stop, compilado.......... não funciona:))))). Reinicializei meu computador, alterei o código fonte, ele funciona. Começou a ajustá-lo através de parâmetros de entrada, novamente não funciona, ou melhor, mudou uma vez, e isso é tudo.......... Pode ser que o vento esteja com problemas ou que eu tenha feito asneira em algum lugar novamente. Estou anexando o código fonte.
//+------------------------------------------------------------------+ //| test8.mq4 | //| Copyright 2017, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //------------------------------------------------------------------- extern double lots = 0.1; extern int TakeProfit = 100; extern int StopLoss = 50; extern int Magic = 777; extern int Slippage = 3; //------------------------------------------------------------------- extern string TMA = "Параметры индикатора TMA"; extern string TimeFrame = "current time frame"; extern int HalfLength = 56; extern int Price = PRICE_CLOSE; extern double ATRMultiplier = 2.0; extern int ATRPeriod = 100; extern bool Interpolate = true; extern int TrailingStop = 50; extern int TrailingStep = 20; int timeprev = 0; //------------------------------------------------------------------- double PriceHigh, PriceLow, SL ,TP; int ticket; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { if (Digits == 3 || Digits == 5); { TakeProfit *=10; Slippage *=10; TrailingStop *=10; TrailingStep *=10; } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if (timeprev == Time [0])return; timeprev = Time [0]; PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0); PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0); if (CountSell() == 0 && Bid >= PriceHigh) { ticket = OrderSend(Symbol(), OP_SELL, lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red); if (ticket > 0) { TP = NormalizeDouble(Bid - TakeProfit*Point, Digits); SL = NormalizeDouble(Bid + StopLoss*Point, Digits); if (OrderSelect(ticket, SELECT_BY_TICKET)) if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0)); Print("Ошибк амодификации ордера на продажу!"); } else Print("Ошибка открытия ордера на продаду!"); } if (CountBuy() == 0 && Ask <= PriceLow) { ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue); if (ticket > 0) { SL = NormalizeDouble(Ask - StopLoss*Point, Digits); TP = NormalizeDouble(Ask + TakeProfit*Point, Digits); if (OrderSelect(ticket, SELECT_BY_TICKET)) if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0)); Print ("Ошибка модификации ордера на покупку!"); } else Print("Ошибка открытия ордера на покупкку!"); } Trailing(); } //+------------------------------------------------------------------+ void Trailing() { for (int i=OrdersTotal() -1; i>=0; i--) { if (OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY) { if (Bid - OrderOpenPrice() > TrailingStop*Point || OrderStopLoss() == 0) { if (OrderStopLoss() < Bid-(TrailingStop+TrailingStep)*Point || OrderStopLoss() == 0) { if (!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble (Bid-TrailingStop*Point, Digits), 0, 0)) Print ("Ошибка модификации ордера на покупку!"); } } } if (OrderType() == OP_SELL) { if (OrderOpenPrice() - Ask > TrailingStop*Point || OrderStopLoss() == 0) { if (OrderStopLoss() > Ask + (TrailingStop+TrailingStep)*Point || OrderStopLoss() == 0) { if (!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble( Ask + TrailingStop*Point, Digits), 0, 0)) Print ("Ошибка модификации ордера на родажу!"); } } } } } } } //+------------------------------------------------------------------+ int CountSell() { int count = 0; for (int trade = OrdersTotal()-1; trade>=0; trade--) { if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL) count++; } } return(count); } //----------------------------------------------------------------------------------------------- int CountBuy() { int count = 0; for (int trade = OrdersTotal()-1; trade>=0; trade--) { if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY) count++; } } return(count); } //-----------------------------------------------------------------------------------------------Boa tarde. Minha pergunta é a seguinte.Eu escrevi um EA, anexei uma parada de rastreamento a ele, compilado.......... não funciona:))))). Mais precisamente, a parada móvel funciona, mas o lucro previamente prescrito não funciona, qual é a razão?
Boa tarde. A pergunta é a seguinte. Escrito um EA, anexado a ele um trailing stop, compilado.......... não funciona:))))) Reinicializei meu computador, alterei o código fonte, ele funciona. Começou a ajustá-lo através de parâmetros de entrada, novamente não funciona, ou melhor, mudou uma vez, e isso é tudo.......... Pode ser que o vento esteja com problemas ou que eu tenha feito asneira em algum lugar novamente. Estou anexando o código fonte.
if (timeprev == Time [0]) { timeprev = Time [0]; return;}
ainda não coloca um tickprofit.... Por favor, dê outra olhada.
ainda não coloca um tickprofit.... Por favor, verifique novamente.
Na função de rastreamento, você fixa o lucro 0 para todos os pedidos, mas quando você o abre, você fixa o lucro certo.
Por favor, leia a lógica linha por linha,
abrir um pedido, estabelecer uma parada e uma tomada
começar a parada do trailing take 0
substitua 0 na ordem de arrasto por OrderTakeProfit()
Agora ele não coloca um semáforo
Agora, não coloca um semáforo
Mostre-me o novo código.
Mostrar o novo código
Eu lhe disse claramente que ao seguir você coloca 0 em vez de levar
Marque esta opção.
Por favor, ajude-me a comparar o preço do MA na primeira barra com os preços do MA nas quatro barras anteriores. Se o preço tiver aumentado e a diferença for maior que N preencha o buffer. Eu estou tentando