Мой советник работает нормально, когда он работает сам по себе, но если я пытаюсь запустить тот же советник на другом символе в то же время на том же профиле, то второй советник работает не очень хорошо или вообще не работает, или возникает много ошибок. Это происходит, даже если я использую Symbol() и разные магические числа для двух отдельных графиков. Это происходит даже если я запускаю разные версии одного и того же кода (т.е. имена файлов советника и магические числа разные, но в остальном код идентичен). Возможно, у меня какой-то конфликт с глобальными переменными или есть какая-то другая причина, по которой второй график просто зависает? Спасибо.
- Что-то интересное
- Мандарин: оригинальный запрос и идеи
- Спрашивайте!
Sneck55:
Мой советник работает нормально, когда он работает сам по себе, но если я пытаюсь запустить тот же советник на другом символе в то же время на том же профиле, то второй советник работает не очень хорошо или вообще не работает, или возникает много ошибок. Это происходит, даже если я использую Symbol() и разные магические числа для двух отдельных графиков. Это происходит даже если я запускаю разные версии одного и того же кода (т.е. имена файлов советника и магические числа разные, но в остальном код идентичен). Возможно, у меня какой-то конфликт с глобальными переменными или есть какая-то другая причина, по которой второй график просто зависает? Спасибо.
Мой советник работает нормально, когда он работает сам по себе, но если я пытаюсь запустить тот же советник на другом символе в то же время на том же профиле, то второй советник работает не очень хорошо или вообще не работает, или возникает много ошибок. Это происходит, даже если я использую Symbol() и разные магические числа для двух отдельных графиков. Это происходит даже если я запускаю разные версии одного и того же кода (т.е. имена файлов советника и магические числа разные, но в остальном код идентичен). Возможно, у меня какой-то конфликт с глобальными переменными или есть какая-то другая причина, по которой второй график просто зависает? Спасибо.
Поскольку запуск одного и того же советника на разных графиках не должен быть проблемой (я делаю это без проблем), вы должны предоставить код... ?
Да. Если зависает второй, то, скорее всего, он пытается использовать тот же ресурс, что и первый.
Лучше покажите нам код, и мы укажем вам, какой из них является виновником, если это не займет много времени.
используйте SRC-кнопку!!!
gooly: используйте SRC-кнопку!!!
Какая часть SRC была непонятна? Почему вы не сделали этого? Отредактируйте свое сообщение!
Воспроизвести видеоПожалуйста, отредактируйте ваше сообщение.
Для больших объемов кода прикрепляйте его.if(BuyTicket != 0) { if(SmallMA<MediumMA) { for(Counter = 0; Counter <=OrdersTotal()-1; Counter++) { : Counter--; }
Если отключится электричество, произойдет сбой ОС, случайно закроется терминал или график, то в следующий раз BuyTicket будет потерян. У вас будет открытый ордер, но вы никогда не попытаетесь его закрыть. Вам не нужно запоминать номер билета, если вы используете цикл OrderSelect.- Вы ДОЛЖНЫ вести обратный отсчет при закрытии/удалении. Возврат на один назад не сработает, если другой советник закроет ордер. Циклы и закрытие или удаление ордеров - Форум MQL4
- Упростите булевы выражения
// if(SmallMA>MediumMA&&MediumMA>LargeMA) MABuyFanning = true; // else MABuyFanning = false; MABuyFanning = (SmallMA>MediumMA&&MediumMA>LargeMA);
if(NewBar == true)
Вы никогда не напишете if( (2+2) == 4) == true), не так ли? if(2+2 == 4) достаточно. Поэтому не пишите if(bool == true), используйте if(bool) или if(!bool).
Кнопка SRC была использована для создания сообщения
Sneck55:
Кнопка SRC была использована для создания сообщения
Кнопка SRC была использована для создания сообщения
да, но первая строка "Sorry for the delay...." не является кодом и все испортила.
#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; }
Sneck55: Для создания сообщения использовалась кнопка SRC
Почему вы не отредактировали свой первоначальный пост?
qjol: ага, но первая строка "Извините за задержку...." - это не код, и это все испортило
Код очень прост, но чем больше окон я запускаю, тем хуже он работает. Я запускал его на 4 разных символах, но даже на одном символе он начинает сбоить через несколько минут. Также он начинает работать нормально, но чем дольше я его запускаю (через пару часов или около того), тем медленнее, медленнее и менее точным он становится. Иногда на удаление каждого эксперта из каждого окна может уйти до минуты, при этом маленький кружок у курсора просто ходит туда-сюда целую вечность. У меня хороший быстрый компьютер, который я только что очистил от мусора и проверил на вирусы - я пробовал это и на своем ноутбуке с точно такими же результатами. Я пробовал загрузить всю историю M1, но это ничего не изменило. Может быть, это какая-то проблема утечки памяти? Может быть, MT4 пытается использовать одни и те же ресурсы снова и снова? Очевидно, что я не смогу доверить ему торговлю на моем реальном счете, пока эта проблема не будет решена!
Это интересно...

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь