Курсы валют
<a href="https://www.instaforex.com/ru/" target="blank">ИнстаФорекс портал"</a>
Новости от FOREXPF.RU
<a href="https://www.instaforex.com/ru/">Форекс портал</a>
Сентябрь 2018
Пн Вт Ср Чт Пт Сб Вс
« Июн    
 12
3456789
10111213141516
17181920212223
24252627282930
При поддержке: деньги и фен шуй.

Торговый дневник 07.05.2017 (воскресенье) Сделал работу стоповыми ордерами в FST 1.28

09:40 С утра продолжаю тестировать советника в разных режимах и дорабатывать:
1. Сделал функцию void CloseByAccountFreeMargin()   // Закрытие самого крупного лося (при отсутствии свободной маржи)
2. Добавил вызов в начало функции Start()
Вылезла 131 ошибка при закрытии лосей по превышению – неправильный объем (лот ордера < 0.1) – нужно сделать обработку ошибки…
11:17 Оттестировал – вроде работает функция CloseByAccountFreeMargin() – лосей закрывает.
И еще выяснил, что MLF лучше использовать 1 – чтобы лоты были одинаковые независимо от количества позиций.
Попробую потестить MLF<1 – вроде получше, но размер лота постоянно уменшается при увеличении количества открытых ордеров. Но MLА становится больше по тренду чем против тренда.

 

 

11:47 Сделал, чтобы при нехватке маржи не закрывался в минус локовый ордер
12:00 Сделал, чтобы при нехватке маржи локовый ордер закрывался частично, на 25%
12:23 Сделал обработку 131 ошибки (неправильные лоты)
                        if ( OrderLots() < dblMinLot ) dOrderLotsClose = OrderLots(); //
Проверил – работает правильно

 

 

12:55 Нужно еще сделать, чтобы PointsMTP менялся в зависимости от волатильности рынка.

Для начала можно сделать по времени – на европе и америке PointsMTP увеличивать, на Азии уменьшать до минимума.
Так же и параметром MLF можно варьировать, как и шагом ордеров в автоматическом режиме, в зависимости от перегруза позиций в ту или другую сторону.

17:08 Днем проездили по магазинам и рынку…
Сейчас тестирую советник по еврику с MLF = 0.99 с разным шагом и PointsMTP Риск выше 0.5% лучше не повышать, а оптимально 0.4% по еврику.
22:37 Долго гонял в тестере версию FST1.28 с разными параметрами, в итоге добился, чтобы вылезла 148 ошибка, при рисках 0,3%, MLF 0.99, шаг 0,1 PointsMTP=0
Но почему-то лишние сделки не закрывались… Добавил
else            {               Print(«error OrderSelect() iTicketMaxLoss_buy=»,iTicketMaxLoss_buy);           
тестирую…
 22:57 При повторном тестировании ошибка не вылезла … странно…

 

 

23:30 Поправил скрипт Расстановка БАЙСТОПОВ – переименовал переменные
Импортировал из скрипта в FST 1.28 функции и параметры открытия отложенных ордеров и сделал функцию
void CheckStopOrders()  — Проверка наличия и открытие отложенных ордеров, а так же передвигание отложенников.
Изменения версии 1.28   2017 05 07 (воскресенье)

Show »

1. Сделал функцию void CloseByAccountFreeMargin()   // Закрытие самого крупного лося (при отсутствии свободной маржи) 2017 05 07 09:07

2. Добавил вызов в начало функции Start()
3. Сделал обработку 131 ошибки (неправильные лоты)
                        if ( OrderLots() < dblMinLot ) dOrderLotsClose = OrderLots(); //
4. Вернул во внешние параметры:
   extern bool    SafeEquityStopOut = TRUE;         // Если 1 — закрываем убыточные позиции, если сумма убытка по всем открытым позициям превышает баланс на dMaxRelativeDrawDown %
   extern double  SafeEquityRiskSO  = 40;            // Максимальный дродаун Эквити в  % от Баланса, после которого все убыточные закрываются
5. Добавил параметры и переменные
   extern int     MaxStopOrders = 10;              // Максимальное количество отложенных стоповых ордеров
   extern int     iStepOrders   = 5;               // Шаг расстановки отложенных стоповых ордеров
   extern double  dLot          = 0.5;             // Размер лота отложенных ордеров
    int iBuyStopOrderType = 0; // -1 — not Initialized, 0 — BUY, 1 — SELL
   int     iSellStopOrderType = 1;                // -1 — not Initialized, 0 — BUY, 1 — SELL
   int     iLimitOrders = 0;                      // 1 — работаем лимитными ордерами
   int     iStopOrders = 1;                       // 1 — работаем стоп ордерами
   double dStepStopOrders;
   double dStopLevel; //  = MarketInfo(strWorkSymbol, MODE_STOPLEVEL)*Point;
6. Импортировал из скрипта функции открытия отложенных ордеров
   void OpenAllStopOrders( int iOrderType )
   int OpenOrder(int iCmd, int iLevel, double dOpenLot, double dPriceOPEN )
   int  CountWorkingOrdersByType(int iCmd){
   double GetOpenPrice (int iCmd, int iLevel = 0)
   string strLevel(int iLevel)
7. В функцию init() добавил dStepStopOrders  = iStepOrders*Point;
dStopLevel  = MarketInfo(Symbol(), MODE_STOPLEVEL)*Point;
8. Сделал функцию    void CheckStopOrders()   //>> 2017 05 08
00:20 Проверка наличия и открытие отложенных ордеров
9. Вставил вызов в Start()  CheckStopOrders()
10. Добавил параметр 
extern double  dActivateStopOpdersLot = 10;     // Размер перегруза позиций в лотах для срабатывания отложенных ордеров
11. Добавлена функция    void ModifyPendingOrders() //>>2017 05 08 01:22 Модификация отложенных ордеров
12. Добавил переменные
int     iBuyLimitOrders = 0;             // 1 — модифицируем БЛ ордера
int     iBuyStopOrders = 1;              // 1 — модифицируем БС ордера
int     iSellLimitOrders = 0;            // 1 — модифицируем СЛ ордера
int     iSellStopOrders = 0;             // 1 — модифицируем СС ордера
13. Добавил вызов в функцию CheckStopOrders() ModifyPendingOrders();

Нужно теперь тестировать и отлаживать, чтобы надежно и правильно работала…
Первые параметры задал в настройках – шаг и количество отложенников, величина перегруза позиций, рабочий размер лота отложенников. Но они должны меняться в зависимости от размера эквити, величины просадки.
Первые тесты показали, что ордера открываются и двигаются, но постоянно выскакивает 130 ошибка – которую нужно обрабатывать…

Оставить комментарий