SleepBar не хочет спать.Помогите пожалуйста

 
Подскажите пожалуйста двоешнику как заставить эксперта совершать только одну сделку на баре.Тобиш если последняя сделка закрыта в 14:26 то следующая должна открытся как минимум в 15:00 (для Н1)
 

Примерно так, унивесально .

Выбираем из хистори ордер с максимальным времене закрытия  .

Делим это время на 3600, запоминаем целую часть1 . Теперь текущее время делим тоже на 3600  вычисляем целую часть2 .

Если целая часть2 > целая часть1 значит наступил новый час .

Вариант 2 с привязкой к конкретике .

в статичную переменную хис1=0 .

если (кол-во хистори ордеров   > хис1)  то запоминаем кол-во бар1 на экране, флаг= true.

если (текущее кол-во бар > бар1 и флаг==true)  производим действия, флаг=фальсе   , хис1= хистори 

 
ivandurak:

Примерно так, унивесально .

Выбираем из хистори ордер с максимальным времене закрытия  .

Делим это время на 3600, запоминаем целую часть1 . Теперь текущее время делим тоже на 3600  вычисляем целую часть2 .

Если целая часть2 > целая часть1 значит наступил новый час .

Вариант 2 с привязкой к конкретике .

в статичную переменную хис1=0 .

если (кол-во хистори ордеров   > хис1)  то запоминаем кол-во бар1 на экране, флаг= true.

если (текущее кол-во бар > бар1 и флаг==true)  производим действия, флаг=фальсе   , хис1= хистори 



Озадачил,но направление дал.Спасибо
 
extern   int      PeriodInSec = 3660;     // Период в секундах между для подсчета тиков
datetime LastTradeTime = D'01.01.1980';
//....................

bool isNewBar()
  {
   if(TimeCurrent() - LastTradeTime > PeriodInSec) {   // Достаточно ли прошло времени после последней операции
      LastTradeTime = TimeCurrent();               // Запоминаем время последней операции
      return(True);
   }
   else return(False);
}

int start(){  
        if (isNewBar()) { // действия если прошло PeriodInSec секунд
        }
            else { // действия если НЕ прошло PeriodInSec секунд
            }
return(0);
}

можно так сделать, можно проверять открылся ли новый бар на Н1 - оптимально запоминать время открытия Time[0] и сравнивать его с Time[0] - если не равно - значит появился новый бар,

теперь Вам необходимо выставить флаг/признак того, что на новом баре Вы совершили сделку, в общем вариантом много как это реализовать

 
IgorM:

можно так сделать, можно проверять открылся ли новый бар на Н1 - оптимально запоминать время открытия Time[0] и сравнивать его с Time[0] - если не равно - значит появился новый бар,

теперь Вам необходимо выставить флаг/признак того, что на новом баре Вы совершили сделку, в общем вариантом много как это реализовать



На горизонте взошло солнце :-) Спасибо

 
IgorM:

можно так сделать, можно проверять открылся ли новый бар на Н1 - оптимально запоминать время открытия Time[0] и сравнивать его с Time[0] - если не равно - значит появился новый бар,

теперь Вам необходимо выставить флаг/признак того, что на новом баре Вы совершили сделку, в общем вариантом много как это реализовать

Игорь, здорова (скоро снова буду в деле), я почти так и делаю, но немножко по-своему, попроще:

//глобальная переменная Last Open Position:
int LOP;
//----
int start()
  {
//----  
  if(LOP<Time[0])
    {//например:
    if(OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,0,0,"",123123123,0,Blue)==true) LOP=TimeCurrent();
    }


//----
  return(0);
  }

Вот и всё (1 действие): при отсутствии других ограничителей при открытии каждого нового бароа будет открываться новый BUY-ордер

 
PPC:

Игорь, здорова (скоро снова буду в деле), я почти так и делаю, но немножко по-своему, попроще:

Вот и всё (1 действие): при отсутствии других ограничителей при открытии каждого нового бароа будет открываться новый BUY-ордер


Прив!

извини, но я делаю еще проще, как всегда - этот код не мой, я просто им пользуюсь :) - думаю, что афтар Rosh

 

да и структурное программирование мне нагляднее/привычнее, чем все в одной главной ф-ции описывать, вот и стараюсь все ф-циями писать

 
IgorM:


Прив!

извини, но я делаю еще проще, как всегда - этот код не мой, я просто им пользуюсь :) - думаю, что афтар Rosh

да и структурное программирование мне нагляднее/привычнее, чем все в одной главной ф-ции описывать, вот и стараюсь все ф-циями писать


понятно. ну мне всё-таки кажется проще объявить 1 глоб.переменную, и потом при заключении сделки присваивать текущее время. В любом случае это уже дело вкуса. Непринципиально.

я тут урывками леплю одну штуку (потом как до ума доведу, обязательно тебе закину), вот там в главной функции всего несколько строк, а так тоже всё по функциям разбиваю.

Просто, когда общий код небольшой - всё в start() запихиваю, а когда поболее - тут уже приходится всё по разным полкам раскладывать.

 
PPC:


... я тут урывками леплю одну штуку (потом как до ума доведу, обязательно тебе закину 


а я уже тебе закинул :) - ЛС глянь, да на связь выходи
 
PPC:

Игорь, здорова (скоро снова буду в деле), я почти так и делаю, но немножко по-своему, попроще:

Вот и всё (1 действие): при отсутствии других ограничителей при открытии каждого нового бароа будет открываться новый BUY-ордер

//глобальная переменная Last Open Position:
int LOP;
//----
int start()
  {
//----  
  if(LOP<Time[0])
    {//например:
    if(OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,0,0,"",123123123,0,Blue)==true) LOP=TimeCurrent();
    }


//----
  return(0);
  }

Наверное корректнее так

LOP=OrdeOpenTime();  

т.к. в случае обрывов связи, сбоев и т.п. TimeCurrent() может уже принадлежать следующему бару.

Причина обращения: