как исправить код, чтобы следующий ордер открывался позже предыдущего на одну минуту - страница 3

 
charony:
неужели никто не знает?

Вы просто ленитесь подумать.

С Вашим кодом разберетесь сами.

Сделайте так:

 datetime LastOpenTime;
 bool Trade;

 int start(){

 Trade=false;
 if(TimeCurrent()- LastOpenTime>60)Trade=true;

 // здесь какие-то Ваши вычисления
 
 if(Trade && Ваши условия входа){OrderSend(...);LastOpenTime=TimeCurrent();}
 
 // прочие Ваши вычисления
 
 return(0);
 }
 
это код из учебника https://book.mql4.com/ru/build/trading
 
пробовал
#include <stdlib.mqh>
#include <stderror.mqh>
#include <WinUser32.mqh>
//--------------------------------------------------------------- 3 --
#include <Variables.mqh> // Îïèñàíèå ïåðåìåííûõ
//#include <Check.mqh> // Ïðîâåðêà ëåãàëüíîñòè èñïîëüçîâ. ïðîãðàìì
#include <Terminal.mqh> // Ó÷¸ò îðäåðîâ
#include <Events.mqh> // Ôóíêöèÿ ñëåæåíèÿ çà ñîáûòèÿìè, îáíîâëåí.
#include <Inform.mqh> // Èíôîðìàöèîííàÿ ôóíêöèÿ
#include <Trade.mqh> // Òîðãîâàÿ ôóíêöèÿ
#include <Open_Ord.mqh> // Îòêðûòèå îäíîãî îðäåðà çàäàííîãî òèïà
#include <Close_All.mqh> // Çàêðûòèå âñåõ îðäåðîâ çàäàííîãî òèïà
#include <Tral_Stop.mqh> // Ìîäèôèêàöèÿ StopLoss âñåõ îðäåðîâ òèïà
#include <Lot.mqh> // Âû÷èñëåíèå êîëè÷åñòâà ëîòîâ
#include <Criterion.mqh> // Òîðãîâûå êðèòåðèè
#include <Errors.mqh> // Ôóíêöèÿ îáðàáîòêè îøèáîê.
//--------------------------------------------------------------- 4 --
int init() // Ñïåö. ôóíêöèÿ init
{
Level_old=MarketInfo(Symbol(),MODE_STOPLEVEL );//Ìèíèì. äèñòàíèöèÿ
Terminal(); // Ôóíêöèÿ ó÷¸òà îðäåðîâ
return; // Âûõîä èç init()
}
//--------------------------------------------------------------- 5 --
int start() // Ñïåö. ôóíêöèÿ start
{
for(int i=OrdersTotal() -1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
t=TimeCurrent()- OrderOpenTime();
}
Terminal(); // Ôóíêöèÿ ó÷¸òà îðäåðîâ
Events(); // Èíôîðìàöèÿ î ñîáûòèÿõ
Trade(Criterion()); // Òîðãîâàÿ ôóíêöèÿ
Inform(0); // Äëÿ ïåðåêðàøèâàíèÿ îáúåêòîâ
return; // Âûõîä èç start()
}
//--------------------------------------------------------------- 6 --
int deinit() // Ñïåö. ôóíêöèÿ deinit()
{
Inform(-1); // Äëÿ óäàëåíèÿ îáúåêòîâ
return; // Âûõîä èç deinit()
}
//--------------------------------------------------------------- 7 --
 
t > 60 пробовал везде вставлять,тестер стратегий виснет и все

соответственно в variables деклариловал static datetime t;
 

Можно сделать так:

if(SecondsAfterOpenLastPos("0", -1, -1)>=60 || OrdersTotal()<1)
  {
   //открываем ордер
  }




//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает количество секунд после открытия последней позиций. |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
datetime SecondsAfterOpenLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
  return(TimeCurrent()-t);
}
 

Непонятна Ваша проблема.

Это работает. Должно работать и у Вас.

 if(Trade && Ваши условия входа для Buy){OrderSend(..OP_BUY...);LastOpenTime=TimeCurrent();Trade=false;}
 if(Trade && Ваши условия входа для Sell){OrderSend(..OP_SELL...);LastOpenTime=TimeCurrent();Trade=false;}
 
DhP
LastOpenTime=TimeCurrent()

такого быть не может

TimeCurrent()это сейчас

LastOpenTime это уже было,разницу видите?

LastOpenTime = может быть равен последнему OrderOpenTime()

тогда будет смысл

 

это тоже самое,что у меня, но не работает

поэтому и спрашиваю здесь

 
charony:

такого быть не может

TimeCurrent()это сейчас

LastOpenTime это уже было,разницу видите?

LastOpenTime = может быть равен последнему OrderOpenTime()

тогда будет смысл

Если переменной LastOpenTime присваивается значение текущего времени в момент открытия ордера, то это значение практически будет равно значению переменной

OrderOpenTime().

 
charony:

такого быть не может

TimeCurrent()это сейчас

LastOpenTime это уже было,разницу видите?

LastOpenTime = может быть равен последнему OrderOpenTime()

тогда будет смысл

Ну, ладно.

Просто Ваше время еще не пришло, чтобы понять и увидеть разницу...

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