0ll Опубликовано 5 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 октября, 2014 в журнале не отображается ничего, кроме открытия последнего ордера.Значит исполнение в процедуру трейлинга не заходит, там-же у Вас принты стоят - по-любому бы в журнале что-то было... Ссылка на сообщение Поделиться на другие сайты More sharing options...
Crik1978 Опубликовано 5 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 октября, 2014 в журнале не отображается ничего, кроме открытия последнего ордера.Значит исполнение в процедуру трейлинга не заходит, там-же у Вас принты стоят - по-любому бы в журнале что-то было... в том то и дело, что стоят принты.Код выглядит вот так: int start(){ Trall();Вызов функции:void Trall (){ for (int i = 0; i { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY) { if (Bid-OrderOpenPrice()> TrailingStop*Point) { if (OrderStopLoss() { SL=NormalizeDouble(Bid-TrailingStop*Point,Digits); if (OrderStopLoss()!=SL) if (OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0,0)) { Print("Модифицирован"); } else Print ("не модифицирован"); } } } if (OrderType()== OP_SELL) { if (OrderOpenPrice()-Ask>TrailingStop*Point) { if (OrderStopLoss() >Ask+(TrailingStop+TrailingStep)*Point) { SL=NormalizeDouble(Ask+TrailingStop*Point,Digits); if (OrderStopLoss()!=SL) if (OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0)) { Print("Модифицирован"); } else Print ("не модифицирован"); } } } } } }}открывается ордер на продажу (в журнале отобразилось открытие), после этого цена пошла ниже, советник открывает новые сделки (продает по тренду), при это в журнале также отображаются сделки, но при всем при этом не происходит Trall открытых сделок (в журнале не выдается сообщений по изменению стопплоса).Нужен совет. Прошу помочь. Ссылка на сообщение Поделиться на другие сайты More sharing options...
chistaia-rodina Опубликовано 5 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 октября, 2014 Crik1978, не работает потому, что для сделок на продажу есть нюансы при трале, не проходит по этому условию:if (OrderStopLoss() >Ask+(TrailingStop+TrailingStep)*Point). Пока первый StopLoss не установлен, нужно проводить сравнение с OrderOpenPrice, а уже потом можно сравнивать с OrderStopLoss . Можно в функции сделать разбивку на два условия, если OrderStopLoss() == 0 и OrderStopLoss() > 0. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
oleguitar Опубликовано 5 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 октября, 2014 Цитата Да, но мы-то говорим о OrdersHistoryTotal() - эта функция фильтровать не умеет. А выход какой-нибудь есть?Вам нужен предпоследний закрытый Вашей совой ордер? если да, то просто добавьте в Ваш код счетчик - i++; Находите 1 ордер i=1, находите 2 - i=2 и если (i=2) break;Если нужны все значения - то массив Profit[ i] = OrderProfit()+...; i++; А можно поподробнее немного?Мне нужно , чтобы сова торговала на нескольких валютных парах, но два убытка подряд учитывала только на одной валютной паре Ссылка на сообщение Поделиться на другие сайты More sharing options...
Crik1978 Опубликовано 5 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 октября, 2014 Crik1978, не работает потому, что для сделок на продажу есть нюансы при трале, не проходит по этому условию:if (OrderStopLoss() >Ask+(TrailingStop+TrailingStep)*Point). Пока первый StopLoss не установлен, нужно проводить сравнение с OrderOpenPrice, а уже потом можно сравнивать с OrderStopLoss . Можно в функции сделать разбивку на два условия, если OrderStopLoss() == 0 и OrderStopLoss() > 0. А почему тогда на видеоуроке тралл происходит?Еще вопрос: сравнение так должно выглядеть?:if (OrderType()== OP_SELL) { if (OrderOpenPrice()-Ask>TrailingStop*Point) { if (OrderStopLoss()==0 ) { SL=NormalizeDouble(OrderOpenPrice()+TrailingStop*Point,Digits); } if (OrderStopLoss() >0) { SL=NormalizeDouble(Ask+TrailingStop*Point,Digits); if (OrderStopLoss()!=SL) if (OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0)) { Print("Модифицирован"); } else Print ("не модифицирован"); } } } Ссылка на сообщение Поделиться на другие сайты More sharing options...
chistaia-rodina Опубликовано 5 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 октября, 2014 Не знаю точно про какой вы видеоурок, но возможно там сначала идёт установка стопа, а уже потом трал. Тут всё логично, если стоп у ордера ещё не установлен, то он равняется (0), поэтому с каким бы ценовым уровнем его не сравнить, он не может быть больше. По вашему примеру будет так: Спойлер if (OrderType()== OP_SELL){ if (OrderStopLoss() == 0) { if (OrderOpenPrice()-Ask>TrailingStop*Point) { if (OrderOpenPrice() >Ask+(TrailingStop+TrailingStep)*Point) { SL=NormalizeDouble(Ask+TrailingStop*Point,Digits); if (OrderStopLoss()!=SL) if (OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0)) { Print("Модифицирован"); } else Print ("не модифицирован"); } } } if (OrderStopLoss() > 0) { if (OrderOpenPrice()-Ask>TrailingStop*Point) { if (OrderStopLoss() >Ask+(TrailingStop+TrailingStep)*Point) { SL=NormalizeDouble(Ask+TrailingStop*Point,Digits); if (OrderStopLoss()!=SL) if (OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0)) { Print("Модифицирован"); } else Print ("не модифицирован"); } } }} Получается просто стоп в расчёте не используется, пока у него нет значения отличного от ноля. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Crik1978 Опубликовано 5 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 октября, 2014 Не знаю точно про какой вы видеоурок, но возможно там сначала идёт установка стопа, а уже потом трал. Тут всё логично, если стоп у ордера ещё не установлен, то он равняется (0), поэтому с каким бы ценовым уровнем его не сравнить, он не может быть больше. По вашему примеру будет так: Спойлер if (OrderType()== OP_SELL){ if (OrderStopLoss() == 0) { if (OrderOpenPrice()-Ask>TrailingStop*Point) { if (OrderOpenPrice() >Ask+(TrailingStop+TrailingStep)*Point) { SL=NormalizeDouble(Ask+TrailingStop*Point,Digits); if (OrderStopLoss()!=SL) if (OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0)) { Print("Модифицирован"); } else Print ("не модифицирован"); } } } if (OrderStopLoss() > 0) { if (OrderOpenPrice()-Ask>TrailingStop*Point) { if (OrderStopLoss() >Ask+(TrailingStop+TrailingStep)*Point) { SL=NormalizeDouble(Ask+TrailingStop*Point,Digits); if (OrderStopLoss()!=SL) if (OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0)) { Print("Модифицирован"); } else Print ("не модифицирован"); } } }} Получается просто стоп в расчёте не используется, пока у него нет значения отличного от ноля. Спасибо. Еще вопрос, тралл происходит, но на графике при визуализации) не выставляется стопплосс. Почему?Добавлено: 05-10-2014 20:21:46 Не знаю точно про какой вы видеоурок, но возможно там сначала идёт установка стопа, а уже потом трал. Тут всё логично, если стоп у ордера ещё не установлен, то он равняется (0), поэтому с каким бы ценовым уровнем его не сравнить, он не может быть больше.Видеоурок с Вашего сайта "Изучаем MQL : Трейлинг-стоп" Ссылка на сообщение Поделиться на другие сайты More sharing options...
chistaia-rodina Опубликовано 5 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 октября, 2014 Честно говоря, не помню как было в уроке, но пересматривать не охота. Если хотите, то можете сами проверить, была ли там предварительная установка стопа, к тому же там иногда попадались ошибки в логике, намеренные и случайные, так что всё может быть. На счёт отображения в режиме визуализации, в принципе должен отрисовываться, если программная установка есть. Почему не отображает, не знаю, возможно Метаквоты опять какой-нибудь глюк закинули в новые билды? У меня пока (670), но люди пишут, что вроде бы у некоторых уже (711) появился. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 5 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 октября, 2014 Crik1978 Вы формулируйте чётче. Не выставляется СЛ или не отрисовывается?Если не выставляется, то что в журнале? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Crik1978 Опубликовано 6 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 октября, 2014 Crik1978 Вы формулируйте чётче. Не выставляется СЛ или не отрисовывается?Если не выставляется, то что в журнале? В журнале выставляется СЛ, но на графике не отрисовывается.Добавлено: 06-10-2014 15:15:28 Crik1978 Вы формулируйте чётче. Не выставляется СЛ или не отрисовывается?Если не выставляется, то что в журнале? В журнале выставляется СЛ, но на графике не отрисовывается. Разобрался. Заработало.Добавлено: 07-10-2014 08:30:41Всем привет!Подскажите, пжл, при осуществлении функции тралл советник тралит только по одному открытому ордеру (например: открыт ордер на продажу № 3, цена опустилась ниже на n-пунктов, советник открывает ордер на продажу № 4 и выставляет SL (на уровне Ask+TrailingStop*Point) только для ордера № 3, после срабатывания SL ордера № 3 советник выставляет SL для ордера № 4).подскажите в чем может быть проблема? Как сделать что бы советник выставлял SL сразу для ордера № 3 и № 4? Изменено 7 октября, 2014 пользователем Crik1978 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 7 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 октября, 2014 Crik1978 Даже не знаю как Вам помочь. Вы-же сетку строите и если выставите СЛ для 3 ордера и цена пойдёт против него - какой же надо СЛ, чтоб его не выбило до открытия 4 ордера?Обычно делают так (для сеток):- пока наблюдаем убыток - СЛ не ставим: строим сеть.- цена развернулась и вышла в 0 - ставим на все ордера СЛ от уровня БУ +- СЛ- цена пошла в (+) - тралим.А Вы хотите и СЛ на каждом ордере и сеть развивать - имхо криво получится.Можно, конечно далёкий Стоп ставить, но смысл? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Crik1978 Опубликовано 7 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 октября, 2014 Crik1978 Даже не знаю как Вам помочь. Вы-же сетку строите и если выставите СЛ для 3 ордера и цена пойдёт против него - какой же надо СЛ, чтоб его не выбило до открытия 4 ордера?Обычно делают так (для сеток):- пока наблюдаем убыток - СЛ не ставим: строим сеть.- цена развернулась и вышла в 0 - ставим на все ордера СЛ от уровня БУ +- СЛ- цена пошла в (+) - тралим.А Вы хотите и СЛ на каждом ордере и сеть развивать - имхо криво получится.Можно, конечно далёкий Стоп ставить, но смысл? в том то и дело, что хочется получить следующее: если поймали тренд (например медвежий), то открываем сделки Sell, которые траллим. Как только цена поднялась на trailingStоp, то закрыть все сделки кроме убыточной (последней сделки на Sell). Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 7 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 октября, 2014 в том то и дело, что хочется получить следующее: если поймали тренд (например медвежий), то открываем сделки Sell, которые траллим. Как только цена поднялась на trailingStоp, то закрыть все сделки кроме убыточной (последней сделки на Sell). А... понял.Надо код смотреть - косяк искать. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Crik1978 Опубликовано 7 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 октября, 2014 в том то и дело, что хочется получить следующее: если поймали тренд (например медвежий), то открываем сделки Sell, которые траллим. Как только цена поднялась на trailingStоp, то закрыть все сделки кроме убыточной (последней сделки на Sell). А... понял.Надо код смотреть - косяк искать. вот код тралла:void TrallSell (){ for (int i = 0; i { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderType()== OP_SELL && CountBuy()==0 && CountSell()>0) { if (OrderStopLoss() == 0) { if (OrderOpenPrice()-Ask>TrailingStop*Point) { if (OrderOpenPrice() >Ask+TrailingStop*Point) { SL=NormalizeDouble(Ask+TrailingStop*Point,Digits); if (OrderStopLoss()!=SL) if (OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0)) { Print("Модифицирован"); } else Print ("не Модифицирован"); } } } if (OrderStopLoss() > 0) { if (OrderOpenPrice()-Ask>TrailingStop*Point) { if (OrderStopLoss() >Ask+TrailingStop*Point) { SL=NormalizeDouble(Ask+TrailingStop*Point,Digits); if (OrderStopLoss()!=SL) if (OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0)) { Print("Модифицирован"); } else Print ("не Модифицирован"); } } if (CountSell()>0 && Ask { if (OrderClose(OrderTicket(), OrderLots(), SL, Slippage, Red)) { Print ("Ордер на продажу закрыт"); } else Print ("Ордер на продажу не закрыт"); } } } } } }} Ссылка на сообщение Поделиться на другие сайты More sharing options...
bataka Опубликовано 7 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 октября, 2014 пытаюсь учить язык программированиявот что написалint start(){ Comment("Привет");return(0);}в тестере стратегий ничего не отображается...в чем причина? В журнал Print на окно Commentи не путай :) Изменено 9 ноября, 2017 пользователем Pavel888 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 7 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 октября, 2014 Crik1978 Без обид - я шокирован... писать буду грубо - может поможет...Вы в одну процедуру поместили несколько разных функций - это не правильно.Вам в 1 очередь нужно навести порядок во всём коде эксперта - иначе ошибки не победить...- внутрь цикла по всем ордерам включены функции внутри которых циклы по всем ордерам (Вы издеваетесь над МТ?)- если у ордера нет СЛ его устанавливать (и проверять наличие) нужно например в CountSell()- если неудачная попытка установить или модифицировать СЛ просто Принта не достаточно - надо выходить из трала- ну и апофеоз: если цена идёт в нашу сторону т.е. для Селл: Ask Не соврал - до трала дело не дойдёт - есть ордер, чуть вышел в (+) - сразу закрываем.зачем Вам CountSell()>0 здесьif (CountSell()>0 && Askесли перед этим написано: if (OrderType()== OP_SELL - ведь это значит, что Селл ордера есть!Ваши ошибки от отсутствия плана и чёткого алгоритма в эксперте. Это не код, а помойка - в ней ковыряться противно. Прости за резкость. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Crik1978 Опубликовано 7 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 октября, 2014 Crik1978 Без обид - я шокирован... писать буду грубо - может поможет...Вы в одну процедуру поместили несколько разных функций - это не правильно.Вам в 1 очередь нужно навести порядок во всём коде эксперта - иначе ошибки не победить...- внутрь цикла по всем ордерам включены функции внутри которых циклы по всем ордерам (Вы издеваетесь над МТ?)- если у ордера нет СЛ его устанавливать (и проверять наличие) нужно например в CountSell()- если неудачная попытка установить или модифицировать СЛ просто Принта не достаточно - надо выходить из трала- ну и апофеоз: если цена идёт в нашу сторону т.е. для Селл: Ask Не соврал - до трала дело не дойдёт - есть ордер, чуть вышел в (+) - сразу закрываем.зачем Вам CountSell()>0 здесьif (CountSell()>0 && Askесли перед этим написано: if (OrderType()== OP_SELL - ведь это значит, что Селл ордера есть!Ваши ошибки от отсутствия плана и чёткого алгоритма в эксперте. Это не код, а помойка - в ней ковыряться противно. Прости за резкость. С каждым бывает в первый раз. Спасибо за прямоту. :-/Добавлено: 07-10-2014 20:38:58 Crik1978 Без обид - я шокирован... писать буду грубо - может поможет...Вы в одну процедуру поместили несколько разных функций - это не правильно.Вам в 1 очередь нужно навести порядок во всём коде эксперта - иначе ошибки не победить...- внутрь цикла по всем ордерам включены функции внутри которых циклы по всем ордерам (Вы издеваетесь над МТ?)- если у ордера нет СЛ его устанавливать (и проверять наличие) нужно например в CountSell()- если неудачная попытка установить или модифицировать СЛ просто Принта не достаточно - надо выходить из трала- ну и апофеоз: если цена идёт в нашу сторону т.е. для Селл: Ask Не соврал - до трала дело не дойдёт - есть ордер, чуть вышел в (+) - сразу закрываем.зачем Вам CountSell()>0 здесьif (CountSell()>0 && Askесли перед этим написано: if (OrderType()== OP_SELL - ведь это значит, что Селл ордера есть!Ваши ошибки от отсутствия плана и чёткого алгоритма в эксперте. Это не код, а помойка - в ней ковыряться противно. Прости за резкость. С каждым бывает в первый раз. Спасибо за прямоту. :-/ просто не могу понять, почему он тянет СЛ только первого ордера, а при срабатывании СЛ 1 ордера - выставляеи СЛ на 2 ордер и т.д. Изменено 7 октября, 2014 пользователем Crik1978 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ttomas Опубликовано 8 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 октября, 2014 Есть одна теория. Так как внутри цикла выбора ордеров есть еще один цикл с выбором ордеров то последней командой OrderSelect будет та что внутри вызываемой функции. Поэтому после условия проверки с вызовом внешней функции разместите еще одну проверку if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)). Скорее всего это решит проблему так как при работе с одним ордером в торговле он не может выбрать иной. А если в торговле уже 2 ордера то выбирается другой и поэтому такие функции как OrderOpenPrice и OrderStopLoss будут выдаваться не принадлежащие текущему ордеру. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 8 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 октября, 2014 Crik1978 Ttomas абсолютно прав. Вам это пока даже сложно понять (имхо).Говоря простым языком: с функциями типа CountBuy() (с перебором ордеров) нельзя играться. Их можно вызвать 1 раз вначале:int cntB = CountBuy();и далее в коде использовать "cntB".Но это мелочи. Возьмите лист бумаги и рисуйте/пишите алгоритм работы бота. Начните примерно так:1. Пришел тик. Что считаем/контролируем на каждом тике.1.1. Подсчёт открытых ордеров (с контролем СЛ, подсчёт профита)2. если есть открытые ордера.2.3. Контроль сигнала на выход. Если ДА - закрываем и выходим2.4. Контроль профита. Если ДА - трал.3. Контроль сигнала на вход. Если ДА - открываем4. Контроль закрытия бара.4.1. Расчёт индикаторов. (если есть) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Crik1978 Опубликовано 8 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 октября, 2014 Crik1978 Ttomas абсолютно прав. Вам это пока даже сложно понять (имхо).Говоря простым языком: с функциями типа CountBuy() (с перебором ордеров) нельзя играться. Их можно вызвать 1 раз вначале:int cntB = CountBuy();и далее в коде использовать "cntB".Но это мелочи. Возьмите лист бумаги и рисуйте/пишите алгоритм работы бота. Начните примерно так:1. Пришел тик. Что считаем/контролируем на каждом тике.1.1. Подсчёт открытых ордеров (с контролем СЛ, подсчёт профита)2. если есть открытые ордера.2.3. Контроль сигнала на выход. Если ДА - закрываем и выходим2.4. Контроль профита. Если ДА - трал.3. Контроль сигнала на вход. Если ДА - открываем4. Контроль закрытия бара.4.1. Расчёт индикаторов. (если есть) Да и правда пока сложно. На ошибках учатся, прошу не судить строго.С добавлением строки int CnB=CountBuy();все получилось. Хотелось чтобы трейлинг происходил, когда ордеров на покупку нет. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 8 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 октября, 2014 Хотелось чтобы трейлинг происходил, когда ордеров на покупку нет. Помните я писал: 2.4. Контроль профита. Если ДА - трал.В основной функции - вызывающей трал нужно делать доп.проверку. Опишем так:2.5. Профит по Селл - ДА и Кол-во Бай ==0 -> Трал(Селл) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Crik1978 Опубликовано 8 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 октября, 2014 Хотелось чтобы трейлинг происходил, когда ордеров на покупку нет. Помните я писал: 2.4. Контроль профита. Если ДА - трал.В основной функции - вызывающей трал нужно делать доп.проверку. Опишем так:2.5. Профит по Селл - ДА и Кол-во Бай ==0 -> Трал(Селл) Спасибо за комментарии. Помогло.Подскажите еще на счет OrderSwap:Если при подсчете общего профита profit += OrderProfit()+OrderSwap(); (Например OrderSwap равно -5, а OrderProfit равно +10).profit =10-5=5 - подсчет идет в таком выражении?Если да, то при подстановке MathAbs следующее выражение будет верным????profit += OrderProfit()+MathAbs(OrderSwap()); profit+=10+|-5|=10+5=15 - ЭТО ВЕРНО? В ТАКОМ ВИДЕ БУДЕТ ПРОИЗВОДИТЬ ВЫЧИСЛЕНИЯ СОВЕТНИК? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 8 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 октября, 2014 Crik1978 При подсчёте профита Своп должен вычитаться - он-же профит уменьшает! Зачем Вы хотите его суммировать с профитом? Если у Вас будет положительный Своп - тогда профит будет больше.Ещё комиссию забыли - то-же профит отедает.sum_PL += OrderProfit()+OrderCommission()+OrderSwap(); - это то, что на счёте останется после закрытия сделки. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Crik1978 Опубликовано 8 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 октября, 2014 Crik1978 При подсчёте профита Своп должен вычитаться - он-же профит уменьшает! Зачем Вы хотите его суммировать с профитом? Если у Вас будет положительный Своп - тогда профит будет больше.Ещё комиссию забыли - то-же профит отедает.sum_PL += OrderProfit()+OrderCommission()+OrderSwap(); - это то, что на счёте останется после закрытия сделки. да формулу, то я понял. Я комиссию намеренно не беру в учет.так если Orderswap будет с минусом, он уменьшит общий профит? Чтобы компенсировать отрицательный СВОП можно ли его сделать MathAbs(OrderSwap())??? Изменено 8 октября, 2014 пользователем Crik1978 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 8 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 октября, 2014 так если Orderswap будет с минусом, он уменьшит общий профит? Чтобы компенсировать отрицательный СВОП можно ли его сделать MathAbs(OrderSwap())???Да, отрицательный своп уменьшает профит.Компенсируют обычно так: хотим заработать 15$ и закрыться - считаем профит с комис и свопом и когда получили 15 - закрываем (чистая прибыль в этот момент была больше, но она компенсировала своп и комиссию) Если Вы придумали другую логику - вперёд - ограничений нет... и, конечно, MathAbs(OrderSwap()) будет работать - куда ему деваться. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти