Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я понял. Возьмём одну пару EURUSD, например. У вас положительные результаты работы вашей ТС по этой паре есть? Можно на стейт взглянуть, если есть?
Извините,прикрепить файл неполучилось почему-то.
http://depositfiles.com/files/r5hsiekll
депозит 250 . Объем 0.01
http://depositfiles.com/files/i14nlcv8z
депозит 1500 объем 0.1
Для первого раза думаю сгодиться)
Параметры ещё не не оптимизированы, можно ещё добавить функцию увеличение объема пропорционально свободным средствам, тогда результат примерно удваивается . Пока ничего другого скозать не могу надо оптимизировать, опробовать на демо тп.
А кстати код я неполный выложил, там ещё условия ТС есть, если надо выложу.
SergNF спасибо большое, да так и вечером сделаю.
Ток вот непонятно че там в моем коде не так было.
Номер магика можно использовать как индентификатор, по которому бот находит свои ордера, верно ?
Здравствуйте. Недавно начал учить MQL4. Вот пишу первый эксперт. На истории все проходит гладко, а на демо возникают проблемы.
Задача: При пробивании свечой IMA на дневном графике(или на любом) во время формирования нового бара(нулевого) открывать ордер в направлении пробива, на максимальной(БайСтоп) и минимальной(Селстоп) цене прошлого бара(который пробил IMA). Если есть открытый данным экспертом ордер на данном графике ( на данной паре ) игнорировать, все последующие сигналы сигналы.
Проблема. На демо открывает один ордер на все графики( те на одну валютную пару, должен открывать по 1 ордеру на каждую пару (каждое окно)). Вроде я все учел в коде, но все равно где то что-то не пошло как надо.
Помогите, пожалуйста, буду признателен.
Ваш код.
1. вешаем поочередно на графики
2. if(OrdersTotal()==0) - сначала всегда истинно - нет открытых ордеров
3. сработало
if(OrdersTotal()==0)
{cond=true;}
4. Открыли ордер по первой паре. Остальные в ожидании - ордера открываются последовательно даже по разным парам - поток один.
5. Дальше if(OrdersTotal()==0) - всегда ложно - есть открытые ордера
6. попадаем на else for(int i=1; i<=OrdersTotal(); i++)
а вот теперь мы все время будем выпадать из цикла либо по условию
if (OrderSymbol()!=Symbol())
{continue;}
Поскольку по какой-то паре ордер выставлен или по
if(OrderMagicNumber()!=magic) // это всегда здесь ложно
{
cond=true;
continue;
}
else break;
поскольку выставлен ордер с соответствующим магиком.
Так что - все работает как написано ;). Возможно не так, как Вы предполагали ...... как думаете поправить ?
ЗЫ К условиям открытия еще вернемся, если захотите разобраться - пока не них не концентрируйтесь.
Каковы у вас результаты работы хотя бы на одной паре?
? прикольная помощь ... он же написал, что учится программировать
Здравствуйте. Недавно начал учить MQL4. Вот пишу первый эксперт. На истории все проходит гладко, а на демо возникают проблемы.
не написал, а пишу ;) ..... какие результаты работы ?
Мдааа. Куда скатился форум. (Вот они "скучающие ... кхм ... форумчане"). Хотя все согласно анекдоту про англоязычный, ивритоязычный и русскоязычные форумы. :(
2Топикастер.
"Проанализируйте" и вставьте в свой советник (в свои советники), например, такую функцию.
(int magic=77777 лучше сделать "extern")
И подобных функций, написанных один раз и "навсегда" (в кавычках) много.Ваш код.
6. попадаем на else for(int i=1; i<=OrdersTotal(); i++)
а вот теперь мы все время будем выпадать из цикла либо по условию
if (OrderSymbol()!=Symbol())
{continue;}
Поскольку по какой-то паре ордер выставлен или по
if(OrderMagicNumber()!=magic) // это всегда здесь ложно
{
cond=true;
continue;
}
else break;
поскольку выставлен ордер с соответствующим магиком.
Так что - все работает как написано ;). Возможно не так, как Вы предполагали ...... как думаете поправить ?
ЗЫ К условиям открытия еще вернемся, если захотите разобраться - пока не них не концентрируйтесь.
Не очень хорошо понял Вас, но в коде я подразумевал следующее:
if (OrderSymbol()!=Symbol()){continue;} если символ ордера не такой же, что и символ валютной пары окна графика к которому присоединен советник т.е символ не наш -продолжить цикл выбора
if(OrderMagicNumber()!=magic) если магик ордера не равен магику советника т.е ордеров открытых данным советником нет, cond=true; условия истины и можно открывать ордер continue - продолжить интерацию до исчерпания ;
else break; если попадается ордер с нашим магиком прекратить цикл, и поскольку cond=false по умолчанию ордер нельзя открывать.
Где моя логика не совпадает с кодом ?Объясните, пожалуйста.
Не очень хорошо понял Вас, но в коде я подразумевал следующее:
if (OrderSymbol()!=Symbol()){continue;} если символ ордера не такой же, что и символ валютной пары окна графика к которому присоединен советник т.е символ не наш -продолжить цикл выбора
if(OrderMagicNumber()!=magic) если магик ордера не равен магику советника т.е ордеров открытых данным советником нет, cond=true; условия истины и можно открывать ордер continue - продолжить интерацию до исчерпания ;
else break; если попадается ордер с нашим магиком прекратить цикл, и поскольку cond=false по умолчанию ордер нельзя открывать.
Где моя логика не совпадает с кодом ?Объясните, пожалуйста.
Подумайте немного - Ваша логика совсем рядом.. в выделенном ошибка: вы выставляете по всем инструментам ордера с одинаковым магиком ;) ..... я то могу пояснить, но самостоятельно добраться гораздо ценнее. Подсказка: Ваш код будет работать, если проверять ордера по инструменту, а не все оптом.
Сделал магиг внешней величиной, отдельной для каждого инструмента. Посмотрим что будет.
Сделал магиг внешней величиной, отдельной для каждого инструмента. Посмотрим что будет.
Ваши два if'а не отрабатывают как логическое И. В итоге после первого if'а остается предыдущее значение переменной cond (true). В конце концов, Вы хотите торговать на Символе и по Магику, поэтому уйдите от "!=" и объедините эти два условия. (Если конечно стиль Fortran 4 Вам не ближе ;) )
ЗЫ. Кстати оказывается ветка не далеко убежала. Там (в начале) кроме функций описаны и их вызовы. Сами функции описаны доступно и если их код читать "по-русски" то все будет понятно. (Минус - там все про четырехзнак, как минимум)
Ваши два if'а не отрабатывают как логическое И. В итоге после первого if'а остается предыдущее значение переменной cond (true). В конце концов, Вы хотите торговать на Символе и по Магику, поэтому уйдите от "!=" и объедините эти два условия. (Если конечно стиль Fortran 4 Вам не ближе ;) )
ЗЫ. Кстати оказывается ветка не далеко убежала. Там (в начале) кроме функций описаны и их вызовы. Сами функции описаны доступно и если их код читать "по-русски" то все будет понятно. (Минус - там все про четырехзнак, как минимум)