такая система заведомо убыточная на дистанциях от тысячи сделок
Подключение библиотек.
- Советник должен увеличивать риск - то есть он будет торговать, значит нужен торговый класс класс CTrade
- Расчёт риска будем производить в процентах от маржи - здесь понадобиться класс CMoneyFixedMargin
Примем такие условности: советник будет отслеживать убыточные позиции по всем символам и всем magic.
Заготовка: "If loss - increase risk.mq5" - версия 1.000:
//+------------------------------------------------------------------+
//| If loss - increase risk.mq5 |
//| Copyright © 2017, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property description "If loss - increase risk"
#property version "1.000"
#include <Trade\Trade.mqh>
#include <Expert\Money\MoneyFixedRisk.mqh>
CTrade m_trade; // trading object
CMoneyFixedRisk m_money;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction& trans,
const MqlTradeRequest& request,
const MqlTradeResult& result)
{
//---
}
//+------------------------------------------------------------------+
//| If loss - increase risk.mq5 |
//| Copyright © 2017, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property description "If loss - increase risk"
#property version "1.000"
#include <Trade\Trade.mqh>
#include <Expert\Money\MoneyFixedRisk.mqh>
CTrade m_trade; // trading object
CMoneyFixedRisk m_money;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction& trans,
const MqlTradeRequest& request,
const MqlTradeResult& result)
{
//---
}
//+------------------------------------------------------------------+
Файлы:
Vladimir Karputov:
Часто приходится решать такое условие - если позиция закрылась с убытком, то нужно увеличить риск.
Как можно отследить вообще факт закрытия позиции? Здесь есть два варианта:
- Постоянное сканирование торговой истории
- Сканирование торговой истории при поступлении события OnTrade()
- "Ловля" события в OnTradeTransaction()
Вариант 1 - хоть это делать в Ontick() (на каждом тике), хоть в OnTimer() - всё это очень затратно по ресурсам. Вариант 2 - можно сказать такой себе средний вариант. Вариант 3 - вот это самый оптимальный вариант в таком случае не приходится проводить постоянное сканирование - достаточно разместить код увеличения рисков в функции OnTradeTransaction().
Далее будет:
- Подключение библиотек
- Метод расчёта размера лота в зависимости от риска на свободную маржу
- Обработка OnTradeTransaction() - взведение флага "нужно увеличить риск"
- Реагирование на событие "нужно увеличить риск"
- ...
В СБ нет класса HashTable, как во многих либах, но он есть тут на сайте https://www.mql5.com/ru/articles/1334
Удобно хранить данные в формате ключ - значение, а в качестве значения использовать указатель на класс сделки. Это будет гораздо быстрее, чем перебор истории.
Рецепты MQL5 - Реализуем ассоциативный массив или словарь для быстрого доступа к данным
- 2015.03.23
- Vasiliy Sokolov
- www.mql5.com
В данной статье описывается специальный алгоритм, позволяющий эффективно получать доступ к элементам по их уникальному ключу. В качестве ключа может быть использован любой базовый тип данных, например ключом могут быть строки или целочисленные переменные. Такой контейнер данных принято называть словарем или ассоциативным массивом. С его помощью решать многие задачи становиться гораздо проще и эффективней.
идея из области мартингейла и его вариаций (растянутый и тд), только не понятно что подразумевается под "увеличиваем риск":
* размер/величину SL
* размер/объем лота
* размер/величину SL И размер/объем лота
так же нужно учитвать не только факт "прибыльная/убыточная сделка", а и размер убытка, т.к. прибыль может быть +1 пункт, убыток -100 пунктов и тд
* размер/величину SL
* размер/объем лота
* размер/величину SL И размер/объем лота
так же нужно учитвать не только факт "прибыльная/убыточная сделка", а и размер убытка, т.к. прибыль может быть +1 пункт, убыток -100 пунктов и тд
Igor Yeremenko:
..., только не понятно что подразумевается под "увеличиваем риск":
...
..., только не понятно что подразумевается под "увеличиваем риск":
...
Увеличение риска в процентах от маржи - таким образом увеличится размер лота при неизменном уровне StopLoss.
Igor Yeremenko:
...
так же нужно учитвать не только факт "прибыльная/убыточная сделка", а и размер убытка, т.к. прибыль может быть +1 пункт, убыток -100 пунктов и тд
...
так же нужно учитвать не только факт "прибыльная/убыточная сделка", а и размер убытка, т.к. прибыль может быть +1 пункт, убыток -100 пунктов и тд
А таки Да! Нужно тоже покрутить такой момент.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Часто приходится решать такое условие - если позиция закрылась с убытком, то нужно увеличить риск.
Как можно отследить вообще факт закрытия позиции? Здесь есть два варианта:
Далее будет: