ограничение позициии по времени в МС - страница 4

 
OZ0 писал (а) >>

Андрей, а как увидеть, что он присоединился? Когда эксперт появляется надпись, а как скрипт - может выставить вертикальную линию ? Я Кима спрашивал про линии 'Полезные функции от KimIV'

Замените функцию start() на следующую:

int start()
{
   if (ObjectFind("ScriptLabel") == -1)
   {
      ObjectCreate("ScriptLabel", OBJ_LABEL, 0, 0, 0);
      ObjectSet("ScriptLabel", OBJPROP_XDISTANCE, 0);
      ObjectSet("ScriptLabel", OBJPROP_YDISTANCE, 10);
   }
   ObjectSetText("ScriptLabel", "Скрипт установки ордеров по времени", 10, "Arial", White);
   
   while (!IsStopped()) 
   { //выполняется пока скрипт не остановлен
      Sleep(1000); 
      if (TimeHour(TimeCurrent( ) ) == H && TimeMinute(TimeCurrent( ) ) == M)
      {
         RefreshRates(); //обновляем котировки 
 
         if (!GetActiveOrders(MN))
         {
            OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-SL*Point,Bid+TP*Point,NULL,MN,0,Red);//Symbol()
            Print (GetLastError());
         }
      }
      if (TimeHour(TimeCurrent( ) ) == CloseH && TimeMinute(TimeCurrent( ) ) == CloseM)
      {
         CheckForExpired(MN);
      }
   }
   
   ObjectDelete("ScriptLabel");
}
 

Получилось так, да? но надпись про скрипт добавляет, а вертикальную линию, что отсюда начат отсчет нет ...

#property copyright "Copyright © 2008, Tinytjan"
#property link      "tinytjan@mail.ru"
#property show_inputs
 
extern int    H        = 01;   //ОТКРОЕМ ПОЗИЦИЮ В ... ЧАСОВ
extern int    M        = 30;   //И ... МИНУТ
extern int    CloseH   = 22;
extern int    CloseM   = 00; 
extern int    SL       = 20;
extern int    TP       = 10;
extern double Lot       = 0.1;
 
extern bool lines    = true;        // показывать на графике вертикальные линии 
extern bool texts    = true;        // показывать текстовые надписи с описаниями  
int MN = 1234567;
//datetime time = 0;
datetime current = 0;
 
//--------------------------
int start()
{
   if (ObjectFind("ScriptLabel") == -1)
   {
      ObjectCreate("ScriptLabel", OBJ_LABEL, 0, 0, 0);
      ObjectSet("ScriptLabel", OBJPROP_XDISTANCE, 650);
      ObjectSet("ScriptLabel", OBJPROP_YDISTANCE, 10);
   }
   ObjectSetText("ScriptLabel","Включен Скрипт-Советник установки ордеров по времени", 10, "Arial", Magenta);
///*   
{
      if(ObjectFind("StartML")>0) //>,<,=,? НУЖНО ЧТОБЫ ПОСТАВИЛ ЛИНИЮ ВПЕРЕД НА ВЫБРАННОЕ ВРЕМЯ "Н" И "М"
      int n = TimeHour(TimeCurrent( ) ) == H && TimeMinute(TimeCurrent( ) ) == M;
      ObjectCreate("StartML",OBJ_VLINE,0,Time[n],0);     
//*/   
 
/*
   //datetime current = 0;
     datetime current = TimeCurrent();
   //datetime current = TimeHour(TimeCurrent( ) ) == H && TimeMinute(TimeCurrent( ) ) == M;
 
      //for( int n, i=1; i<2; i++) // создание линий и надписей на графике
      //n = TimeHour(TimeCurrent( ) ) == H && TimeMinute(TimeCurrent( ) ) == M;
      
      for(int i = OrdersTotal() - 1; i >= 0; i--)
 
      {      
        
         //if(lines)
         if (ObjectFind("New Line ") == -1)
         {
            ObjectCreate("New Line ", OBJ_VLINE, 0, current, 0);// Time[n]
            ObjectSet("New Line ", OBJPROP_COLOR, Red);
            ObjectSet("New Line ", OBJPROP_STYLE, STYLE_DASHDOTDOT);
            ObjectSet("New Line ", OBJPROP_BACK, true); 
            //ObjectSet("New Line ", OBJPROP_ANGLE, 90);//ПОВОРОТ В ГРАДУСАХ                     
            ObjectSetText("New Line ", "Скрипт", 10, "Arial", Magenta); // TimeHour(TimeCurrent( ) ) == H && TimeMinute(TimeCurrent( ) ) == M;
         }
*/        
/*         
         //if (texts)
         if (ObjectFind("New Text ") == -1)
         {
            ObjectCreate("New Text ", OBJ_TEXT, 0, current, 0);
            ObjectSet("New Text ", OBJPROP_COLOR, Red);
            ObjectSet("New Text ", OBJPROP_ANGLE, 90);//ПОВОРОТ В ГРАДУСАХ
            ObjectSetText("New Text ", "Скрипт", 10, "Arial", Magenta); 
         }
*/         
         
      }                
   while (!IsStopped()) 
   { //выполняется пока скрипт не остановлен
      Sleep(1000); 
      if (TimeHour(TimeCurrent( ) ) == H && TimeMinute(TimeCurrent( ) ) == M)
      {
         RefreshRates(); //обновляем котировки 
 
         if (!GetActiveOrders(MN))
         {
            OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Bid-SL*Point,Bid+TP*Point,NULL,MN,0,Red);//Symbol()
            Print (GetLastError());
         }
      }
      if (TimeHour(TimeCurrent( ) ) == CloseH && TimeMinute(TimeCurrent( ) ) == CloseM)
      {
         CheckForExpired(MN);
      }
   }
   
   ObjectDelete("ScriptLabel");
   ObjectDelete("New Line");
   ObjectDelete("New Text");
 
}
 
void CheckForExpired(int MN = -1)
{
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      // already closed
      if(OrderSelect(i, SELECT_BY_POS) == false) continue;
      // not current symbol
      if(OrderSymbol() != Symbol()) continue;
      // order was opened in another way
      if(OrderMagicNumber() != MN && MN != -1) continue;
      
      if (TimeHour(TimeCurrent( ) ) == CloseH && TimeMinute(TimeCurrent( ) ) == CloseM)
      {
         if(OrderType() == OP_BUY)
         {
            OrderClose(OrderTicket(), OrderLots(), Bid, 3, Blue);
         }
         
         if(OrderType() == OP_SELL)
         {
            OrderClose(OrderTicket(), OrderLots(), Ask, 3, Red);
         }
 
         RefreshRates();
      }
   }
}
 
bool GetActiveOrders(int MagicNumber)
{
   for(int i = 0; i < OrdersTotal(); i++)
   {
      // already closed
      if(OrderSelect(i, SELECT_BY_POS) == false) continue;
      // not current symbol
      if(OrderSymbol() != Symbol()) continue;
      // order was opened in another way
      if(OrderMagicNumber() != MagicNumber) continue;
      
      if(OrderType() == OP_SELL || OrderType() == OP_BUY)
      {
         return (true);
      }
   }
   
   return (false);
}

Вообщем тулил тулил - нифига не умею.
 
OZ0 писал (а) >>

Получилось так, да? но надпись про скрипт добавляет, а вертикальную линию, что отсюда начат отсчет нет ...

Ну я думал проблема именно в том, чтобы определить, есть ли скрипт на графике, эта проблема решена.

А насчет линий... попробуйте сами, свой лимит времени на сегодня я исчерпал, извините.

 
TheXpert писал (а) >>

Ну я думал проблема именно в том, чтобы определить, есть ли скрипт на графике, эта проблема решена.

А насчет линий... попробуйте сами, свой лимит времени на сегодня я исчерпал, извините.

Большое спасибо за помощь. Это Вы меня извините за настырность.

 
Пробовал, пробовал - вижу не получается. Выложил ночью как есть...
 

to OZO

в срочном порядке навскидку кусочек из GTerminal

написано рыхло, но работает, критика принимается

положение линии = переменная времени TimeVertLine, можно использовать для чего то другого. Положение линии = чистое время.

(чтобы изменить по теме ветки - нужно вникнуть, наверное надо убрать из кода движение линии)

задача вертикальная линия в качестве предохранителя, т.е. если верт.линия правеее рынка - советник торгует, если на барах - спит

проверяем есть ли линия с именем Pause написанная произвольно (пользователь поставил)

если нет - ставим свою с именем PAUSE. (свою линию по кончанию работы советника убираем в деинит).

если линия правее рынка то рынок несет ее как флаг, т.е. толкает вправо.

если линия на рынке - утолщаем и имеем флаг -предохранитель взведен.

Были проблемы в Тестере Стратегий, - плавающая ошибка, MQ что то исправляли. Поэтому тестирование обходится, a будет ли снова работать в тестере 217 версии не проверял.

P.S.

вот ведь жизнь какая, приходиться рано ложиться и поздно вставать.

Файлы:
vert_line.mq4  6 kb
Причина обращения: