Здравствуйте, гуру программирования на MQL4! Подскажите пожалуйста, как такое возможно:
Кусок кода программы:
LogAdd("Начинаю вычисления переменных для текущего тика ... ");
for (int i = OrdersTotal()-1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS);
LogAdd("Выбираю ордер с тикетом: " + i);
if ((OrderOpenTime() > opnTime) && (OrderType() == OP_BUY) || (OrderType() == OP_SELL)) {
opnTime = OrderOpenTime();
currentTicket = OrderTicket();
currentStopLoss = OrderStopLoss();
LogAdd("Ордер открыт позже предыдущего, не является отложенным. Записываю переменные: opnTime - " + opnTime + ", currentTicket - " + currentTicket + ", currentStopLoss - " + currentStopLoss + ".");
}
if (OrderType() == OP_BUY) {
buyCntr ++;
buyOpnPrice = OrderOpenPrice();
lotsSumBuy += OrderLots();
TrailingByShadows(OrderTicket(), Period(), 11, 0);
LogAdd("Ордер не является отложенным, тип ордера - на покупку, обновляю переменные, пытаюсь трейлить: buyCntr - " + buyCntr + ", buyOpnPrice - " + buyOpnPrice + ", lotsSumBuy - " + lotsSumBuy + ".");
}
if (OrderType() == OP_SELL) {
sellCntr ++;
sellOpnPrice = OrderOpenPrice();
lotsSumSell += OrderLots();
TrailingByShadows(OrderTicket(), Period(), 11, 0);
LogAdd("Ордер не является отложенным, тип ордера - на продажу, обновляю переменные, пытаюсь трейлить: sellCntr - " + sellCntr + ", sellOpnPrice - " + sellOpnPrice + ", lotsSumSell - " + lotsSumSell + ".");
} if (OrderType() == OP_SELLSTOP) {
sellOpnPrice = OrderOpenPrice();
LogAdd("Ордер является отложенным, тип ордера - на продажу, фиксирую цену открытия: sellOpnPrice - " + sellOpnPrice + ".");
}
if (OrderType() == OP_BUYSTOP) {
buyOpnPrice = OrderOpenPrice();
LogAdd("Ордер является отложенным, тип ордера - на покупку, фиксирую цену открытия: buyOpnPrice - " + buyOpnPrice + ".");
}
}
LogAdd("Вычисления переменных для текущего тика завершены.");
Кусок лога для этого участка:
2013.10.215:59:0 - Начинаю вычисления переменных для текущего тика ...
2013.10.215:59:0 - Выбираю ордер с тикетом: 52013.10.215:59:0 - Ордер является отложенным, тип ордера - на продажу, фиксирую цену открытия: sellOpnPrice - 1.35250000.
2013.10.215:59:0 - Выбираю ордер с тикетом: 42013.10.215:59:0 - Ордер открыт позже предыдущего, не является отложенным. Записываю переменные: opnTime - 1380728738, currentTicket - 93537240, currentStopLoss - 0.00000000.2013.10.215:59:0 - Ордер не является отложенным, тип ордера - на покупку, обновляю переменные, пытаюсь трейлить: buyCntr - 1, buyOpnPrice - 1.35620000, lotsSumBuy - 0.06000000.
2013.10.215:59:0 - Ордер не является отложенным, тип ордера - на продажу, обновляю переменные, пытаюсь трейлить: sellCntr - 1, sellOpnPrice - 1.35250000, lotsSumSell - 0.01000000.2013.10.215:59:0 - Выбираю ордер с тикетом: 32013.10.215:59:0 - Ордер не является отложенным, тип ордера - на продажу, обновляю переменные, пытаюсь трейлить: sellCntr - 2, sellOpnPrice - 1.35250000, lotsSumSell - 0.04000000.
2013.10.215:59:0 - Выбираю ордер с тикетом: 22013.10.215:59:0 - Ордер не является отложенным, тип ордера - на покупку, обновляю переменные, пытаюсь трейлить: buyCntr - 2, buyOpnPrice - 1.35620000, lotsSumBuy - 0.07000000.
2013.10.215:59:0 - Ордер не является отложенным, тип ордера - на продажу, обновляю переменные, пытаюсь трейлить: sellCntr - 3, sellOpnPrice - 1.35250000, lotsSumSell - 0.05000000.
2013.10.215:59:0 - Выбираю ордер с тикетом: 12013.10.215:59:0 - Ордер не является отложенным, тип ордера - на покупку, обновляю переменные, пытаюсь трейлить: buyCntr - 3, buyOpnPrice - 1.35620000, lotsSumBuy - 0.08000000.
2013.10.215:59:0 - Ордер не является отложенным, тип ордера - на продажу, обновляю переменные, пытаюсь трейлить: sellCntr - 4, sellOpnPrice - 1.35250000, lotsSumSell - 0.06000000.
2013.10.215:59:0 - Выбираю ордер с тикетом: 02013.10.215:59:0 - Ордер не является отложенным, тип ордера - на продажу, обновляю переменные, пытаюсь трейлить: sellCntr - 5, sellOpnPrice - 1.35250000, lotsSumSell - 0.07000000.
2013.10.215:59:0 - Вычисления переменных для текущего тика завершены.
Вопрос, как для одного и того же ордера могли сработать условия:
if (OrderType() == OP_BUY) {
...
}
if (OrderType() == OP_SELL) {
...
}
Мб я чего-то не понимаю, но тогда по логике вещей получается, что для данного ордера:
OP_BUY == OP_SELL
В принципе, мне не важно почему так происходит, важно чтобы sellCntr++ и buyCntr++ выполнялись однозначно для определенного типа открытых ордеров, помогите исправить?
Здравствуйте, гуру программирования на MQL4! Подскажите пожалуйста, как такое возможно:
Кусок кода программы:
Кусок лога для этого участка:
Вопрос, как для одного и того же ордера могли сработать условия:
Мб я чего-то не понимаю, но тогда по логике вещей получается, что для данного ордера:
В принципе, мне не важно почему так происходит, важно чтобы sellCntr++ и buyCntr++ выполнялись однозначно для определенного типа открытых ордеров, помогите исправить?
Откуда уверенность, что это один и тот же ордер ? Тикет Вы же не печатаете ;).... Уверен: при трале идет перебор ордеров ;) - наведенная ошибка оттуда.
TrailingByShadows(OrderTicket(), Period(), 11, 0); ?????????????????????????????? Вы при трале разве ордера не перебираете ??????????
VladislavVG: Откуда уверенность, что это один и тот же ордер ? Тикет Вы же не печатаете ;).... Уверен: при трале идет перебор ордеров ;) - наведенная ошибка оттуда.
По логике вещей: зачем мне перебирать ордера в трале, если я уже знаю, какой конкретно ордер мне надо протралить? Перебора там нет, вот код:
Уважаемые программисты, скажите, пожалуйста, почему при очередной перезагрузке компа, при открытии терминала вместо нормального графика появилось серое окно, пропали открытые позиции, советник, индикаторы, а при вызове нового графика, позиции появились, но нет советника и индикаторов, пришлось вновь их устанавливать. С чем это связано? Спасибо.
Такая проблема возникла. Тестер стратегий срабатывает только один раз. Точнее, визуализация тестирования срабатывает один раз, а в следующие разы при нажатии кнопки "старт" галочка "визуализация" сбрасывается и ничего не происходит (вроде как не происходит). Как это победить?
Думается, что программно через шаблоны можно. Создаём шаблон с индюком, с помощью _lread kernel32.dll читаем значение shift_size, с помощью_lwrite пишем туда число от 10 до 50, вроде такие диапазоны может принимать этот параметр, потом через InternalMsg загружаем шаблон. Только непонятно, там 33511 или 35511. В WinUser32.mqh первый вариант, а на форуме везде второй. Вопрос наверное к Жунко. В МТ5 несравненно легче, CHART_SHIFT_SIZEтам доступно через ChartSetString() и ChartGetString() из любой точки кода... Может, есть ещё варианты в МТ4? Хотя, глупый вопрос...
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Подскажите пожалуйста, что я делаю не так. Пытаюсь сделать простейший индикатор:
{ int limit,i; double last; int counted_bars = IndicatorCounted(); //---- check for possible errors if (counted_bars < 0) return(-1); //---- last counted bar will be recounted if(counted_bars > 0) counted_bars--; limit = Bars - counted_bars; //---- for(i=limit; i>=0; i--) { double OptClose = Close[i]*10000; if (MathMod(OptClose,step1)==0) { Buffer0[i] = Close[i]; last = Close[i]; } else Buffer0[i] = last; } //---- return(0); } //+------------------------------------------------------------------+В окне графика работает, при попытке потестить в советнике рисует либо что попало, либо "без ступенек"
Подскажите пожалуйста, что я делаю не так. Пытаюсь сделать простейший индикатор:
В окне графика работает, при попытке потестить в советнике рисует либо что попало, либо "без ступенек"
Пробовал. В таком варианте даже просто в окне не работает. Очевидно тут какая-то хитрость. Сейчас работает в таком варианте, но жутко тормозит:
Это с отключенной проверкой на пересчет последнего бара.
Здравствуйте, гуру программирования на MQL4! Подскажите пожалуйста, как такое возможно:
Кусок кода программы:
Кусок лога для этого участка:
Вопрос, как для одного и того же ордера могли сработать условия:Мб я чего-то не понимаю, но тогда по логике вещей получается, что для данного ордера:
В принципе, мне не важно почему так происходит, важно чтобы sellCntr++ и buyCntr++ выполнялись однозначно для определенного типа открытых ордеров, помогите исправить?Здравствуйте, гуру программирования на MQL4! Подскажите пожалуйста, как такое возможно:
Кусок кода программы:
Кусок лога для этого участка:
Вопрос, как для одного и того же ордера могли сработать условия:Мб я чего-то не понимаю, но тогда по логике вещей получается, что для данного ордера:
В принципе, мне не важно почему так происходит, важно чтобы sellCntr++ и buyCntr++ выполнялись однозначно для определенного типа открытых ордеров, помогите исправить?TrailingByShadows(OrderTicket(), Period(), 11, 0); ?????????????????????????????? Вы при трале разве ордера не перебираете ??????????Откуда уверенность, что это один и тот же ордер ? Тикет Вы же не печатаете ;).... Уверен: при трале идет перебор ордеров ;) - наведенная ошибка оттуда.
По логике вещей: зачем мне перебирать ордера в трале, если я уже знаю, какой конкретно ордер мне надо протралить? Перебора там нет, вот код:
PS: Кстати, данная проблема возникает только в реальных условиях, т.е. в тестере не воспроизводится.Такая проблема возникла. Тестер стратегий срабатывает только один раз. Точнее, визуализация тестирования срабатывает один раз, а в следующие разы при нажатии кнопки "старт" галочка "визуализация" сбрасывается и ничего не происходит (вроде как не происходит). Как это победить?
По логике вещей: зачем мне перебирать ордера в трале, если я уже знаю, какой конкретно ордер мне надо протралить? Перебора там нет, вот код:
PS: Кстати, данная проблема возникает только в реальных условиях, т.е. в тестере не воспроизводится.Попробуйте запустить в таком варианте:
Посмотрите, что в логах писать будет.
WindowBarsPerChart() - WindowFirstVisibleBar() - 2;можно, а вот выставить как.
Добавлено
Думается, что программно через шаблоны можно. Создаём шаблон с индюком, с помощью _lread kernel32.dll читаем значение shift_size, с помощью _lwrite пишем туда число от 10 до 50, вроде такие диапазоны может принимать этот параметр, потом через InternalMsg загружаем шаблон. Только непонятно, там 33511 или 35511. В WinUser32.mqh первый вариант, а на форуме везде второй. Вопрос наверное к Жунко. В МТ5 несравненно легче, CHART_SHIFT_SIZE там доступно через ChartSetString() и ChartGetString() из любой точки кода... Может, есть ещё варианты в МТ4? Хотя, глупый вопрос...