- Как определить тип последней закрытой сделки
- Подскажите пожалуйста (mql4)
- [АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3.
Примерно так, унивесально .
Выбираем из хистори ордер с максимальным времене закрытия .
Делим это время на 3600, запоминаем целую часть1 . Теперь текущее время делим тоже на 3600 вычисляем целую часть2 .
Если целая часть2 > целая часть1 значит наступил новый час .
Вариант 2 с привязкой к конкретике .
в статичную переменную хис1=0 .
если (кол-во хистори ордеров > хис1) то запоминаем кол-во бар1 на экране, флаг= true.
если (текущее кол-во бар > бар1 и флаг==true) производим действия, флаг=фальсе , хис1= хистори
Примерно так, унивесально .
Выбираем из хистори ордер с максимальным времене закрытия .
Делим это время на 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] - если не равно - значит появился новый бар,
теперь Вам необходимо выставить флаг/признак того, что на новом баре Вы совершили сделку, в общем вариантом много как это реализовать
можно так сделать, можно проверять открылся ли новый бар на Н1 - оптимально запоминать время открытия Time[0] и сравнивать его с Time[0] - если не равно - значит появился новый бар,
теперь Вам необходимо выставить флаг/признак того, что на новом баре Вы совершили сделку, в общем вариантом много как это реализовать
На горизонте взошло солнце :-) Спасибо
можно так сделать, можно проверять открылся ли новый бар на Н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-ордер
Игорь, здорова (скоро снова буду в деле), я почти так и делаю, но немножко по-своему, попроще:
Вот и всё (1 действие): при отсутствии других ограничителей при открытии каждого нового бароа будет открываться новый BUY-ордер
Прив!
извини, но я делаю еще проще, как всегда - этот код не мой, я просто им пользуюсь :) - думаю, что афтар Rosh
да и структурное программирование мне нагляднее/привычнее, чем все в одной главной ф-ции описывать, вот и стараюсь все ф-циями писать
Прив!
извини, но я делаю еще проще, как всегда - этот код не мой, я просто им пользуюсь :) - думаю, что афтар Rosh
да и структурное программирование мне нагляднее/привычнее, чем все в одной главной ф-ции описывать, вот и стараюсь все ф-циями писать
понятно. ну мне всё-таки кажется проще объявить 1 глоб.переменную, и потом при заключении сделки присваивать текущее время. В любом случае это уже дело вкуса. Непринципиально.
я тут урывками леплю одну штуку (потом как до ума доведу, обязательно тебе закину), вот там в главной функции всего несколько строк, а так тоже всё по функциям разбиваю.
Просто, когда общий код небольшой - всё в start() запихиваю, а когда поболее - тут уже приходится всё по разным полкам раскладывать.
... я тут урывками леплю одну штуку (потом как до ума доведу, обязательно тебе закину
а я уже тебе закинул :) - ЛС глянь, да на связь выходи
Игорь, здорова (скоро снова буду в деле), я почти так и делаю, но немножко по-своему, попроще:
Вот и всё (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() может уже принадлежать следующему бару.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования