Причина закрытия последней позиции. Как узнать? - страница 2

 
xrust писал (а) >>

2 Climber, коллега будте добры постоянным лотом в 0,1 оптимизация любых два месяца этого года, и прогон с начала года по сей момент.

ЗЫ хотя все это совершенно бесполезно - т.к. в приведенном вами брокере авто трейдинг запрещен

Автотрейдинг запрещён, но я всё это делаю чтоб проверить работоспособность стратегии и подобрать оптимальные параметры. Но вариант ещё сырой, много есть чего в мыслях, но в код они переходят медленно. Туговато даётся. Что смог с помощью форумчан и книги Сергея Ковалёва, то и пытаюсь воплотить. По ходу изучаю новые возможности, которые хочу добавить в советника.

Оптимизацию не делаю по двум причинам: во-первых я в ней разочаровался, всё время мне это кажется подгонкой под историю, а во-вторых наверно из-за несовершенства кода оптимизация моего советника ужасно долго идёт. 

А если постоянным лотом 10% от первоначального депозита, то есть 1 лотом, то за тот же период выходит 24000 с 10000.

 

1) по поводу оптимизации : это не есть зло, оптимизация позволяет подобрать значимые стат закономерности для данной пары, на данном тф. которые потом можно и нужно использовать, но с умом, а не слепо доверяя ей. Скажу как старый электронщик, к примеру у нас есть некий усилитель аналогового сигнала, для которого нужно подобрать значения внешних элементов, для введения его в нужный нам режим, так вот, знач. элем. для сигнала от предположим динамического микрофона, и електретного будут совершенно разные, т. к. разные амплитуды и ачх. так же вы не станете применять параметры которые подойдут для EURUSD на GBPJPY. и тд.и тп.

2) Выбор Дц: нет никакого смысла строить систему на параметрах которых потом точно не станеш торговать, для примера заведите реал у вашего брокера и прогоните систему построенную на котировках с демо. Уверяю вас - сразу почувствуте разницу...

3)Если вы не собираетесь торговать на реале лотом 7 или 1. то гонять систему с таким лотом на демо сплошной самообман.

 

В основном я гоняю лотом 0.1 с депозитом 300$. За тот же период тысячу набирает. А большие суммы лота и депозита использовал просто чтоб полюбоваться)).

Чтоб не создавать новую тему, хочу задать ещё один вопросик. Я хочу в конце дня закрывать позицию до свопа, но уже не открывать её потом. Просто закрыть и всё. В коде решил что это выглядеть будет так:

int vremya = 0;
int vremya1 = 0;
bool TradeTime = true;
if (TimeHour(TimeCurrent()) == 23 && TimeMinute(TimeCurrent()) > 40) //Время после 23:40
     {
     vremya = 1;
     }
if (TimeHour(TimeCurrent()) == 0 && TimeMinute(TimeCurrent()) < 10) //Время до 0:10
     {
     vremya1 = 1;
     }
if (vremya == 1 && vremya1 == 1)
     {
     TradeTime = false; //В этом временном промежутке не торговать
     }

Ну и соответственно в условия закрытия позиции добавил TradeTime == false.

Но в результате ничего не происходит. Свопы как были, так и остались. Это хочу сделать из-за того, что по свопу позиция закрывается с прибылью, но потом срабатывает лось и убыток превышает своповую прибыль.

 

как время может быть одновременно и 23.40 и 00.10 ?

надо по ставить или.

if (vremya == 1 || vremya1 == 1)
 
xrust писал (а) >>

как время может быть одновременно и 23.40 и 00.10 ?

надо по ставить или.

Не путайте человека, вы ошибаетесь.

 

Да ничего не путаю вот сами посмотрите:

//+------------------------------------------------------------------+
//|                                                    ___Pustou.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
static int prevtime = 0 ;
//-------------------------------------------------------------------+
int start()
  {
// --------------Ждем, когда сформируется новый бар------------------+
   if (Time[0] == prevtime) return(0);
      prevtime = Time[0];
//-------------------------------------------------------------------+  
  bool TradeTime=true;
  if((Hour()>22&&Minute()>40)||(Hour()==0&&Minute()<10))
   {TradeTime=false;Comment("out of time");}else{Comment("   ");} 
   return(0);
  }
//+------------------------------------------------------------------+
 
Climber писал (а) >>

В основном я гоняю лотом 0.1 с депозитом 300$. За тот же период тысячу набирает. А большие суммы лота и депозита использовал просто чтоб полюбоваться)).

Чтоб не создавать новую тему, хочу задать ещё один вопросик. Я хочу в конце дня закрывать позицию до свопа, но уже не открывать её потом. Просто закрыть и всё. В коде решил что это выглядеть будет так:

Ну и соответственно в условия закрытия позиции добавил TradeTime == false.

Но в результате ничего не происходит. Свопы как были, так и остались. Это хочу сделать из-за того, что по свопу позиция закрывается с прибылью, но потом срабатывает лось и убыток превышает своповую прибыль.

xrust правильное условие указал. В действительности, если сейчас 23 и больше сорока минут, то в тот же момент не может быть 00 часов и меньше 10 минут. Либо 23, либо 00.

 

я писал ф-ция для определения времени

и тоже закрывал в конце для до перехода на новый день

выглядит так

// проверка конца дня
// при включенном параметры все позиции будут закрыты в конце дня, и не будет давать открывать некоторое время
// время блокирование определяется глобальной переменной, если она не объявлена будет взято по умолчанию
// - 10 минут до и после 0 часов 
bool checkUseWorkDay(bool Param = false)
{ bool result = true;
   if (Param == true)
    { int h, m, ctm, htm;
      int lm;
      // проверим текущее время
      h = TimeHour(TimeCurrent());
      m = TimeMinute(TimeCurrent());
      lm = GlobalVariableGet("GV_CLOSE_TIME_DAY");
      if (lm == 0) lm = 10;
      if (lm > 30) lm = 10;
      ctm = 60 - lm;
      if (DayOfWeek() == 5)
       htm = 22;
      else
       htm = 23; 
      if (h == htm && m > ctm)
       { result = false;
         // закрыть позиции есть есть открытые
         if (OrdersTotal() > 0)
           PrintEx("Конец дня-закрытие");
         CloseAllOrders(Symbol(), D_MAGIC);
       }
      else if (h == 0 && m < lm) 
       result = false;
    }
   return(result); 
}

а в start писал так

if (checkUseWorkDay(EX_USE_WORK_DAY) == false)
       {          return(0);
       }
 
И вправду, одновременно два разных времени быть не может))). Это я не додумался сначала. Сделал так как написал xrust, только без ожидания формирования нового бара, всё равно свопы срабатывают. Зачем ждать формирования нового бара, я всегда использую тайфрейм Н4? За один бар Н4 может много чего случиться.
 
Climber писал (а) >>
Зачем ждать формирования нового бара, я всегда использую тайфрейм Н4? За один бар Н4 может много чего случиться.

Чтобы не грузить машину в режиме тестирования лишними обсчетами. Стандартная процедура