vikas
Алексей

 
Уровень 9

  Торгую в компаниях:


Группа "Стол заказов MQL"

Рейтинг 2146



РЕКОМЕНДУЮ



частичное закрытие ордера

Здравствуйте, нужен элемент системы для частичного закрытия ордера.
Существующий советник открывает ордера с усреднением. Градация лотности-
— 0.01, 0.02, 0.03, 0.05, 0.08
Как сделать так чтобы при открытии 3-го ордера данного магика второй частично(лотом 0.01)закрывался.
Нужно учесть что вокруг могут быть открыты ордера с другими магиками.

Для чего это необходимо: Часть логики советника такова — второй ордер открывается лотом с коэффициентом 2.
На определённом временном промежутке это часто помогает получить прибыль ограничившись лишь двумя ордерами.
Но иногда движения цены не хватает для закрытия и советник продолжает усредняться, но уже с коэффициентом 1.6
В этом случае лишний объём второго ордера не нужен.

Если нельзя написать, скажем, отдельным блоком, напишите простой советник с учётом вышеизложенного. Мне нужно
понять как это можно сделать. Дальше я сделаю сам.
  • 0
  • Просмотров: 2380
  • 24 февраля 2017, 09:58
  • vikas
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
Следующая запись в группе  
Исправить индикатор
23 февраля 2017
24 февраля 2017

Брокер для ваших роботов, 15 лет на рынке

Комментарии (6)

+
0
Так пробовали?
input double Lots=0.01;
void  CloseOrder(double lot)
{
//...
}
if(CountTrades()>2) CloseOrder(Lots);
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 24 февраля 2017, 11:23
+
0
Так частично закрываются все 3 ордера. А нужно только второй. Или делаю что то
не то. Что в скобках? Так?

 bool cl=true;
 double pAsk;
 for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            pAsk=MarketInfo(OrderSymbol(),MODE_ASK);
          
            if(OrderType()==OP_SELL)         cl=OrderClose(OrderTicket(),lot,fND(pAsk),Slip,Red);
           }
        }
     
  }
avatar

  9  vikas Автор Сообщений: 113 - Алексей

  • 24 февраля 2017, 12:34
+
0
Вот здесь кройте нужный ордер:

if(OrderSelect(1,SELECT_BY_POS,MODE_TRADES))
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 24 февраля 2017, 12:48
+
0
буду пробовать спасибо.
avatar

  9  vikas Автор Сообщений: 113 - Алексей

  • 24 февраля 2017, 13:27
+
0
Если не получится, я попробую :) 
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 24 февраля 2017, 19:00
+
0
Да так частично он закрывается. Правда вылезает косяк с усреднением. После выставления 3-го ордера и частичного удаления второго ордера моментально выставляется 4-ый ордер лотом 0.02. И непонятно то ли это из за тестера, то ли из за логики блока усреднения.(блок усреднения стандартный) Смотрю в результаты и такое ощущение что второй ордер сначала удаляется полностью а потом тестер по этой же цене выставляет новый ордер с лотом 0.01 (как бы частично закрылся) Ну и получается Step 2-го ордера то пройден, он и выставляет 4-ый ордер лотом 0.02. Но почему? Ведь есть третий ордер и Step должен считаться от него. Я конечно
изловчился изменил усреднение, добавил переменных и как бы работает. Но я не уверен будет ли это работать в реале — может кодом я просто исправил проблему
тестера. Вообщем буду смотреть дальше после выходных.
Редактирован: 25 февраля 2017, 09:32
avatar

  9  vikas Автор Сообщений: 113 - Алексей

  • 25 февраля 2017, 09:32

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий