Версия 1.105: Введены отдельные функции OpenBuy и OpenSell
//| Открытие BUY позиции по символу |
//+------------------------------------------------------------------+
bool OpenBuy(const double lot)
{
bool res=false;
double price=m_symbol.Ask();
double tp=m_symbol.NormalizePrice(m_symbol.Bid()+InpTP*m_adjusted_point);
if(m_trade.Buy(lot,m_symbol.Name(),price,0.0,tp))
if(m_trade.ResultDeal()>0)
res=true;
return(res);
}
//+------------------------------------------------------------------+
//| Открытие SELL позиции по символу |
//+------------------------------------------------------------------+
bool OpenSell(const double lot)
{
bool res=false;
double price=m_symbol.Bid();
double tp=m_symbol.NormalizePrice(m_symbol.Ask()-InpTP*m_adjusted_point);
if(m_trade.Sell(lot,m_symbol.Name(),price,0.0,tp))
if(m_trade.ResultDeal()>0)
res=true;
return(res);
}
Теперь код более читаем.
Как всегда проблема - что делать с убыточными позициями, которые висят? Вот пример версии 1.105:
и версия 1.105 с внесением одного небольшого изменения: в OnTradeTransaction (при обнаружении закрытия позиции по TakeProfit) делаем поиск самой убыточной позиции и закрываем эту самую убыточную позицию:
Напомню, что одиночные тестирования проводятся исключительно в режиме "Каждый тик на основе реальных тиков".
Оба варианта стартовали с 10000. Какой вариант выбирать - думаю зависит от конкретных целей.
есть вариант закрыть все позици при получении тп хотя бы одной из них
В таком случае может быть так:
первый старт - две разнонаправленные позиции, одна получает TakeProfit и закрываем все (то есть закроем оставшуюся - убыточную). В итоге фиксируем прибыль по TakeProfit и одновременно убыток по второй позиции.
Как-то не очень.
В таком случае может быть так:
первый старт - две разнонаправленные позиции, одна получает TakeProfit и закрываем все (то есть закроем оставшуюся - убыточную). В итоге фиксируем прибыль по TakeProfit и одновременно убыток по второй позиции.
Как-то не очень.
у меня такой валяется, но там мартин должен быть 2 минимум + удачный вход
основная проблема это поиск входа при котором сумма удачных должна более чем наполовину перекрывать сумму неудачных
8 колен от 0.01 хватает если это не кросс
теория
1) открываются 2 ордера по 0.01 в разную сторону по сигналу
2) если цена проходит нужное расстояние в профит то доливка с тейком количество доливок, шаг колена и тейка - с этим можно долго играться
Решил оставить второй вариант (... с внесением одного небольшого изменения: в OnTradeTransaction (при обнаружении закрытия позиции по TakeProfit) делаем поиск самой убыточной позиции и закрываем эту самую убыточную позицию ...):
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Vladimir Karputov, 2017.01.22 19:00
Как всегда проблема - что делать с убыточными позициями, которые висят? Вот пример версии 1.105:
и версия 1.105 с внесением одного небольшого изменения: в OnTradeTransaction (при обнаружении закрытия позиции по TakeProfit) делаем поиск самой убыточной позиции и закрываем эту самую убыточную позицию:
Напомню, что одиночные тестирования проводятся исключительно в режиме "Каждый тик на основе реальных тиков".
Оба варианта стартовали с 10000. Какой вариант выбирать - думаю зависит от конкретных целей.
теперь версия 1.106
Версия 1.007 - защита от перезапуска терминала:
if(!RefreshRates())
return;
if(m_first)
{
//--- защита от перезапуска терминала:
int total=0;
for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions
if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
total++;
//--- если на торговом счёте уже есть позиции открытые данным экспертом -
//--- значит инициализируем переменные таким образом, что вроде уже был первый раз
if(total>0)
{
bln_buy=true;
bln_sell=true;
m_first=false;
return;
}
if(OpenBuy(InpLot))
bln_buy=true;
if(OpenSell(InpLot))
bln_sell=true;
m_first=false;
}
//---
Теперь если терминал был перезапущен или советник был перекомпилирован и при этом на данном торговом счёте советник уже открыл позиции - то с таком случае не будет ситуации "первый запуск".
Версия 1.108 Теперь при пересечении и при TakeProfit если есть прибыльная позиция, то она также закрывается.
Сравните 1.108 (верхние графики) с предыдущей версией 1.107:
и
У версии 1.108 общая прибыль меньше, но также и просадки в сложные периоды меньше раза в два, по сравнению с версией 1.107.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
New Martin:
New Martin - советник, который при старте открывает две противоположные позиции. Обработка OnTradeTransaction. При срабатывании Take Profit открывает позицию (ОДНУ) в туже строну. Пересечение двух индикаторов МА - это сигнал к открытию увеличенным лотом позиции.
Автор: Vladimir Karputov