Minha EA funciona bem quando está funcionando por conta própria, mas se eu tentar executar a mesma EA em um Símbolo diferente ao mesmo tempo no mesmo perfil, então a segunda não funciona muito bem ou não funciona de todo ou há muitos erros. Isto acontece mesmo se eu usar Symbol() e números mágicos diferentes para os dois gráficos separados. Isto acontece até mesmo se eu executar versões diferentes do mesmo código (isto é, os nomes dos arquivos EA e os números mágicos são diferentes, mas o código é idêntico caso contrário). Será que tenho algum tipo de conflito com as variáveis globais ou há alguma outra razão pela qual o segundo simplesmente fica pendurado? Obrigado.
- aventuras de um novato
- Dois robôs em um gráfico
- Erros, bugs, perguntas
Sneck55:
Minha EA funciona bem quando está funcionando por conta própria, mas se eu tentar executar a mesma EA em um Símbolo diferente ao mesmo tempo no mesmo perfil, então a segunda não funciona muito bem ou não funciona de todo ou há muitos erros. Isto acontece mesmo se eu usar Symbol() e números mágicos diferentes para os dois gráficos separados. Isto acontece até mesmo se eu executar versões diferentes do mesmo código (isto é, os nomes dos arquivos EA e os números mágicos são diferentes, mas o código é idêntico caso contrário). Será que tenho algum tipo de conflito com as variáveis globais ou há alguma outra razão pela qual o segundo simplesmente fica pendurado? Obrigado.
Minha EA funciona bem quando está funcionando por conta própria, mas se eu tentar executar a mesma EA em um Símbolo diferente ao mesmo tempo no mesmo perfil, então a segunda não funciona muito bem ou não funciona de todo ou há muitos erros. Isto acontece mesmo se eu usar Symbol() e números mágicos diferentes para os dois gráficos separados. Isto acontece até mesmo se eu executar versões diferentes do mesmo código (isto é, os nomes dos arquivos EA e os números mágicos são diferentes, mas o código é idêntico caso contrário). Será que tenho algum tipo de conflito com as variáveis globais ou há alguma outra razão pela qual o segundo simplesmente fica pendurado? Obrigado.
Como não deve ser um problema executar a mesma EA em gráficos diferentes (eu faço isso sem problemas) você deve fornecer o código... ?
Sim. Se o segundo estiver pendurado, muito provavelmente está tentando usar o mesmo recurso como o primeiro.
É melhor nos mostrar o código e nós lhe indicaremos qual é o culpado, se não for demorado.
use o botão SRC!!
gooly: use o botão SRC!!
Que parte da SRC não estava clara? Por que você não o fez? Edite seu post!
Reproduzir vídeoPor favor, edite seu post.
Para grandes quantidades de código, anexá-lo.if(BuyTicket != 0) { if(SmallMA<MediumMA) { for(Counter = 0; Counter <=OrdersTotal()-1; Counter++) { : Counter--; }
Se a energia falhar, o sistema operacional falhar, o terminal ou a tabela for fechada acidentalmente, a próxima vez que o BuyTicket for perdido. Você terá um pedido aberto, mas nunca tente fechá-lo. Você não precisa se lembrar do número do bilhete quando usar um loop OrderSelect.- Você DEVE fazer uma contagem regressiva ao fechar/apagar. Voltar um não funcionará se outro EA fechar um pedido. Loops e Encerramento ou Eliminação de Pedidos - Fórum MQL4
- Simplifique suas booleans
// if(SmallMA>MediumMA&&MediumMA>LargeMA) MABuyFanning = true; // else MABuyFanning = false; MABuyFanning = (SmallMA>MediumMA&&MediumMA>LargeMA);
if(NewBar == true)
Você nunca escreveria se( (2+2) == 4) == verdadeiro) você escreveria se( (2+2 == 4) é suficiente. Então não escreva if(bool == verdadeiro), apenas use if(bool) ou if(!bool).
O botão SRC foi usado para fazer o poste
Sneck55:
O botão SRC foi usado para fazer o poste
O botão SRC foi usado para fazer o poste
yep, mas a primeira linha "Sorry for the delay...." não é código e arruinou tudo
#property copyright "Copyright 2014, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict extern bool CheckOncePerBar = true; extern double FixedLotSize = 1; extern double SystemStopLoss = 150; extern double TakeProfit = 0; extern int Slippage = 5; extern int MagicNumber = 3574; //Global Variables int BuyTicket; int SellTicket; double InternalStopLoss; double CalcDigits; double CalcPoint; bool MABuyFanning; bool MASellFanning; int SelectedOrder; bool Closed; int ErrorCode; string ErrLog; double BuyStopLoss; double SellStopLoss; bool NewBar; double ThisBarOpen; double SmallMA; double MediumMA; double LargeMA; int Counter; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { CalcDigits = MarketInfo(Symbol(),MODE_DIGITS);//MODE_DIGITS is count of digits after decimal point if(CalcDigits == 0) CalcPoint = 1;//Dow if(CalcDigits == 1) CalcPoint = 0.1; if(CalcDigits == 2) CalcPoint = 0.01;//Gold & Nymex if(CalcDigits == 3) CalcPoint = 0.01;//Yen if(CalcDigits == 4) CalcPoint = 0.0001;//Not used if(CalcDigits == 5) CalcPoint = 0.0001;//Non-Yen forex InternalStopLoss = SystemStopLoss*CalcPoint; return(INIT_SUCCEEDED); } //----------------------------------------------- void OnTick() { if(CheckOncePerBar == true) { if(ThisBarOpen != Open[0]) { ThisBarOpen = Open[0]; NewBar = true; } else NewBar = false; } else NewBar = true; if(NewBar == true) { //Reset Moving Averages SmallMA = iMA(NULL,0,8,0,1,0,0); MediumMA = iMA(NULL,0,10,0,1,0,0); LargeMA = iMA(NULL,0,50,0,1,0,0); if(SmallMA>MediumMA&&MediumMA>LargeMA) MABuyFanning = true; else MABuyFanning = false; if(SmallMA<MediumMA&&MediumMA<LargeMA) MASellFanning = true; else MASellFanning = false; if(BuyTicket == 0 && MABuyFanning == true) { RefreshRates(); BuyStopLoss = Bid - InternalStopLoss; // while(IsTradeContextBusy()) Sleep(10); BuyTicket = OrderSend(Symbol(),OP_BUY,FixedLotSize,Ask,Slippage,BuyStopLoss,0,"Buy Order",MagicNumber,0,Green); if(BuyTicket == -1) { ErrorCode = GetLastError(); Alert("Symbol: ",Symbol(),"Error in buy routine: ",ErrorCode); ErrLog = StringConcatenate("Bid: ",MarketInfo(Symbol(),MODE_BID)," Ask: ",MarketInfo(Symbol(),MODE_ASK)," Lots: ",FixedLotSize," Stop Loss: ",BuyStopLoss); Print(ErrLog); //Buy ticket revert to 0 so it can try again in case of slow connection/timeout etc. BuyTicket = 0; } } if(SellTicket == 0 && MASellFanning == true) { RefreshRates(); SellStopLoss = Ask + InternalStopLoss; // while(IsTradeContextBusy()) Sleep(10); SellTicket = OrderSend(Symbol(),OP_SELL,FixedLotSize,Bid,Slippage,SellStopLoss,0,"Sell Order",MagicNumber,0,Red); if(SellTicket == -1) { ErrorCode = GetLastError(); Alert("Symbol: ",Symbol(),"Error in sell routine: ",ErrorCode); ErrLog = StringConcatenate("Bid: ",MarketInfo(Symbol(),MODE_BID)," Ask: ",MarketInfo(Symbol(),MODE_ASK)," Lots: ",FixedLotSize," Stop Loss: ",SellStopLoss); Print(ErrLog); SellTicket = 0; } } //Exits if(BuyTicket != 0) { if(SmallMA<MediumMA) { for(Counter = 0; Counter <=OrdersTotal()-1; Counter++) { SelectedOrder = OrderSelect(Counter,SELECT_BY_POS); if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() && OrderType() == OP_BUY) { // while(IsTradeContextBusy()) Sleep(10); Closed = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_BID),Slippage,Red); if(Closed == true) BuyTicket = 0; else Alert("Symbol: ",Symbol()," Ticket: ",BuyTicket," unable to close buy order(s): buy ma convergence close routine"); } Counter--; } } } if(SellTicket != 0) { if(SmallMA>MediumMA) { for(Counter = 0; Counter <=OrdersTotal()-1; Counter++) { SelectedOrder = OrderSelect(Counter,SELECT_BY_POS); if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() && OrderType() == OP_SELL) { // while(IsTradeContextBusy()) Sleep(10); Closed = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_ASK),Slippage,Red); if(Closed == true) SellTicket = 0; else Alert("Symbol: ",Symbol()," Ticket: ",SellTicket," unable to close sell order(s): sell ma convergence close routine"); } Counter--; } } } } return; }
O código é extremamente simples e, no entanto, quanto mais janelas eu o executo, pior é o seu desempenho. Tenho-o executado em 4 Símbolos diferentes, mas ele começa a falhar em 1 símbolo após alguns minutos. Também começa bem, mas quanto mais tempo eu o executo (após um par de horas ou mais), mais lento e menos preciso ele se torna. Às vezes, pode levar até um minuto para remover cada EA de cada janela com o pequeno círculo ao lado do cursor, girando e girando por idades. Eu tenho um bom PC rápido que acabei de desfragmentar e verificar se há vírus - eu também já o fiz em meu laptop com exatamente os mesmos resultados. Tentei baixar todo o histórico da M1, mas isso não faz diferença. Poderia ser algum tipo de problema de vazamento de memória talvez? O MT4 está tentando usar os mesmos recursos uma e outra vez? Claramente não poderei confiar nele para negociar em minha conta ativa até que o problema esteja resolvido!
Isto é interessante...
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