Форум » Консультации по программированию » Я в шоке! Подскажите. » Ответить

Я в шоке! Подскажите.

Sergey: Всем привет! Я в шоке! Выпал из рынка на 3,5 месяца, а тут такие перемены. Игорь подскажи, где можно ознакомиться с изменениями в MQL4? Хотел перенести все данные на новый комп, но некоторые индикаторы после компиляции перестают работать. Вот один из них. http://gfile.ru/a8cCP Хотя не перекомпилированные файлы работают. Компиляция ошибок в коде не выявляет. Но при отладке выдается ошибка формирования массива стр.67. Но в чем ошибка не пойму. Буду благодарен, если найдешь время исправить.

Ответов - 203, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 All

Scriptong: Sergey пишет: Есть ли варианты? В дополнение к варианту Genry: прибавлять после префикса имя символа и, если нужно, таймфрейм графика.

Sergey: Игорь, в силу ряда реальных обстоятельств пришел к выводу, что брокеры учитывают алгоритм работы прибыльных советников появившихся в сети. Можно ли программно скрыть имя и настройки советника от брокера.

Genry: Sergey пишет: Игорь, в силу ряда реальных обстоятельств пришел к выводу, что брокеры учитывают алгоритм работы прибыльных советников появившихся в сети. Можно ли программно скрыть имя и настройки советника от брокера. Думаю при необходимости (или при желании) брокер может со своей стороны через МТ получить доступ к файлам трейдера и выкачать необходимую информацию. Так что имеет смысл, получив прибыльного советника, с него вообще не торговать, а копировать его сигналы на пустой МТ где стоит только копировальщик сделок - имитируя ручное исполнение команд.


Sergey: Genry пишет: Так что имеет смысл, получив прибыльного советника, с него вообще не торговать, а копировать его сигналы на пустой МТ где стоит только копировальщик сделок - имитируя ручное исполнение команд. Как вариант да, а еще можно выставить 0 магик, сойдет за ручную торговлю. Я торговал 5 месяцев с доходностью 40-80% в месяц и проблем не было, пока не выставил советник на продажу через mql5. Еще ровно месяц торговал, а затем все постепенно свелось к безубытку и что обидно, на демке, как и прежде все в ажуре, по крайней мере, результаты на много лучше. Не хочу отказываться от продаж, вот и ищу варианты.

Genry: Sergey пишет: Еще ровно месяц торговал, а затем все постепенно свелось к безубытку и что обидно, на демке, как и прежде все в ажуре, по крайней мере, результаты на много лучше. Да, по видимому подобрали индивидуальный фильтр

Scriptong: Genry пишет: Думаю при необходимости (или при желании) брокер может со своей стороны через МТ получить доступ к файлам трейдера и выкачать необходимую информацию. Прямо теории заговора Неужели Вы всерьез думаете, что Meta Quotes предоставляют подобный сервис брокерам? Если бы такое было, то утечки информации не удалось избежать и давно появились бы скандалы. Более того, даже сами для себя Meta Quotes этого не сделают, потому как репутация дороже. Разного рода умельцы уже вдоль и поперек прочесали терминалы MT4 и MT5, несмотря на их хваленую защиту (не бывает абсолютной защиты). Если бы там был намек на выуживание информации, то Meta Quotes - не жилец.

Scriptong: Sergey пишет: Игорь, в силу ряда реальных обстоятельств пришел к выводу, что брокеры учитывают алгоритм работы прибыльных советников появившихся в сети. Можно ли программно скрыть имя и настройки советника от брокера. Поверьте, вывод в корне неверный. Рынок - это достаточно сложная система, являющаяся надстройкой над социальными процессами. А социальные процессы - это сложнее, чем термоядерные реакции. Для справки: управляемые термоядерные реакции только разрабатываются, но еще далеки от массового использования. Другое дело, что есть много брокеров, нечистых на руку, которые убивают прибыльные стратегии своим прямым вмешательством. Потому совет достаточно простой: торгуйте у нормальных брокеров (США, Канада, немного Западная Европа). Как только у брокера в регистрации видите какие-нибудь Виргинские о-ва - бегите от него.

Sergey: Scriptong пишет: Другое дело, что есть много брокеров, нечистых на руку, которые убивают прибыльные стратегии своим прямым вмешательством. Все брокеры отслеживают работу своих клиентов - информация от источника в кругах брокера. Однако данные по вмешательству в работу трейдера предположительные по косвенным признакам. Появились советники в которых авторы вводят параметр скрывающий название эксперта от брокера. Идея перестраховаться будет не лишней. Но как это реализовать не знаю.

Scriptong: Sergey пишет: Появились советники в которых авторы вводят параметр скрывающий название эксперта от брокера. Идея перестраховаться будет не лишней. Но как это реализовать не знаю. Тут придется немного попотеть. Схема такова: 1. Стратегия пишется в виде индикатора или неторгующего советника. 2. Все торговые операции выполняет специальный скрипт, который вызывается из программы (п. 1). 3. "Общение" между скриптом и программой производится через глобальные переменные, именованные каналы или специальную DLL. Я такое делал в прошлом году. Подобный подход позволяет увеличить скорость отдачи торговых приказов в 8 раз (по числу доступных торговых потоков в МТ4) за счет их распараллеливания.

Sergey: Scriptong пишет: 3. "Общение" между скриптом и программой производится через глобальные переменные, именованные каналы или специальную DLL. Я предполагал наличие иного варианта, так как в mql5 запрещены dll и обращения к иным программам. Scriptong пишет: Я такое делал в прошлом году. Подобный подход позволяет увеличить скорость отдачи торговых приказов в 8 раз (по числу доступных торговых потоков в МТ4) за счет их распараллеливания. Предложенный вариант тоже заинтересовал. Но для его реализации нужен пример (скажем при реализации советника на диверах) или более подробное описание (может в виде статьи). Есть еще вопрос: Установка TP и SL путем модификации ордера. if (!OrderModify(OrderTicket(), OpPrice, SL, TP,0)) { Alert("Ошибка модификации ордера ",Type," = ",GetLastError()); return(false); } Выскакивает ошибка - 139 Ордер заблокирован и уже обрабатывается Получается, что ордер уходит на модификацию, но не получив ответ о результате модификации советник продолжает работать. И на последующих тиках выскакивают ошибки. Раньше такого не было. Какие существуют варианты решения этой проблемы?

Scriptong: Sergey пишет: Предложенный вариант тоже заинтересовал. Но для его реализации нужен пример (скажем при реализации советника на диверах) или более подробное описание (может в виде статьи). К сожалению, там достаточно много кода получается. В статьях, которые бы читали другие (кратко и лаконично), его не опишешь. Sergey пишет: Есть еще вопрос: Установка TP и SL путем модификации ордера. if (!OrderModify(OrderTicket(), OpPrice, SL, TP,0)) { Alert("Ошибка модификации ордера ",Type," = ",GetLastError()); return(false); } Выскакивает ошибка - 139 Ордер заблокирован и уже обрабатывается Скорее всего здесь речь идет о "заморозке" ордера. Это еще одно ограничение кухонь наряду со Stop Level. Называется Freeze Level. Его значение можно получить через: MarketInfo(_Symbol, MODE_FREEZELEVEL); Если цена открытия отложенного ордера ближе к текущей цене, чем на уровень заморозки, то ничего с ордером уже нельзя будет сделать. То же самое касается, рыночного ордера, когда рынок подходит слишком близко к Stop Loss и Take Profit. В последние годы большинство брокеров устанавливают нулевой размер заморозки. Но, по всей видимости, еще остались динозавры .

Sergey: Scriptong пишет: Скорее всего здесь речь идет о "заморозке" ордера. Что же, придется ввести функцию корректной модификации ордера. и больше с ней не расставаться.

Scriptong: Да, Sergey пишет: Что же, придется ввести функцию корректной модификации ордера. и больше с ней не расставаться. Да, для каждой торговой операции перед ее выполнением следует выполнять целый комплекс проверок на предмет корректности параметров. Если речь идет о модификации отложенного ордера, то список таков: 1. Если изменяется цена открытия ордера, то: 1.1 Проверить расстояние между текущей рыночной ценой и текущей ценой открытия на предмет попадания в коридор Freeze Level. 1.2 Проверить расстояние между рынком и новой ценой открытия на предмет попадания в коридор Stop Level. 1.3 Если не изменяются Stop Loss и Take Profit, то проверить, возможно ли перемещение цены открытия так, чтобы Stop Loss и Take Profit не оказались в коридоре Stop Level. 2. Если изменяется цена Stop Loss, то проверить расстояние от нового Stop Loss до новой цены открытия ордера. Если расстояние менее Stop Level, то модификация невозможна. 3. Если изменяется цена Take Profit, то проверить расстояние от нового Take Profit до новой цены открытия ордера. Если расстояние менее Stop Level, то модификация невозможна. 4. Если изменяется время истечения ордера, то проверить, не будет ли новое время слишком близко к текущему времени. Зазор должен быть не менее 600 секунд.

Sergey: Игорь, помоги, я в тупике. Индикатор рассчитывается по старшему ТФ (WorkTF) на периоде int ShowBars , но должен отрисовываться на графике младшего ТФ. Проблема с проверкой и подкачкой данных. При установке индикатора сразу на младший ТФ, ошибка выдается. А вот при смене ТФ со старшего на младший нет. Индикатор не удаляется, но и не отрисовывается. В чем причина не могу разобраться и, соответственно, исправить ошибку. int OnInit() { datetime New_dtBegin = iTime(NULL,WorkTF,ShowBars); if(!IsAllBarsAvailable(New_dtBegin)) { Alert("Не достаточна глубина истории баров. Индикатор удален."); return(INIT_FAILED); } return(INIT_SUCCEEDED); } //---- bool IsAllBarsAvailable(datetime dtBeginBar) { int lastBar = iBarShift(NULL, 0, dtBeginBar); if (GetLastError() == ERR_HISTORY_WILL_UPDATED) return (false); if(lastBar <= 0) return (false); // Проверка доступности баров for(int i=lastBar; i>=0; i--) if(iTime(NULL,0,i)==0) return (false); // Все бары доступны return (true); }

Scriptong: Sergey пишет: Проблема с проверкой и подкачкой данных. В OnInit еще рано делать выводы о том, закачана история по нужному ТФ или нет. Проверить достаточность баров правильнее так: if (iBars(NULL, WorkTF) <= ShowBars) { Alert("Недостаточная глубина истории. Индикатор отключен."); return INIT_FAILED; } А вот проверять, загружена история по нужному ТФ или нет, нужно уже в OnCalculate: int OnCalculate(...) { iTime(NULL, WorkTF, 1); if (GetLastError() != ERR_NO_ERROR) return prev_calculated; // История по ТФ WorkTF успешно загружена } Чтобы определить, почему индикатор не отображается, нужно посмотреть, код OnCalculate.



полная версия страницы