Стратегии и роботы > Зациклить работу робота

Обсуждение, описание стратегий и роботов, идеи для стратегий
Arteshka
Сообщения: 71
Зарегистрирован: 10 ноя 2017, 12:43
Благодарил (а): 3 раза
Поблагодарили: 2 раза

Зациклить работу робота

Непрочитанное сообщение Arteshka » 22 ноя 2017, 22:18

Всем привет!!!
Кому интересно, можно попробовать зациклить робота на более частое выполнение. Сделать тайминг.
Пример ниже запускает робота на выпjлнение каждую секунду. Не надо ждать нового бара.

Код: Выделить всё

function OnUpdate()
{       
  while( true )
     {                 
         ShowMessage( "Hello World");
         System.Threading.Thread.Sleep(2000);// пауза 1000=секунда
     }

}

Аватара пользователя
Den
Сообщения: 352
Зарегистрирован: 09 фев 2016, 15:52
Благодарил (а): 14 раз
Поблагодарили: 4 раза

Re: Зациклить работу робота

Непрочитанное сообщение Den » 23 ноя 2017, 01:02

и что работает? Пробовали ?

On Update срабатывает только за закрытии бара.

Внутри бара исполнения нет до сих пор, хотя ждут многие этого.

Arteshka
Сообщения: 71
Зарегистрирован: 10 ноя 2017, 12:43
Благодарил (а): 3 раза
Поблагодарили: 2 раза

Re: Зациклить работу робота

Непрочитанное сообщение Arteshka » 23 ноя 2017, 08:14

Стоит попробовать! ;)

Аватара пользователя
Den
Сообщения: 352
Зарегистрирован: 09 фев 2016, 15:52
Благодарил (а): 14 раз
Поблагодарили: 4 раза

Re: Зациклить работу робота

Непрочитанное сообщение Den » 23 ноя 2017, 11:07

нет,не работает.

Кроме того, запущенный советник остановил графики почему-то.

Arteshka
Сообщения: 71
Зарегистрирован: 10 ноя 2017, 12:43
Благодарил (а): 3 раза
Поблагодарили: 2 раза

Re: Зациклить работу робота

Непрочитанное сообщение Arteshka » 23 ноя 2017, 11:21

У меня все работает. Вот код робота, не индикатора и без вызова индикатора:

Код: Выделить всё

function Initialize()
{
   StrategyName = "456";
   AddParameter("P1", 0, "", 1);
   AddInput("Input1", Inputs.Candle, 1, true, "");
   LongLimit = 0;
   ShortLimit = 0;   
}

function OnUpdate()
{   
  while( true )
     {                                 
       ShowMessage( "Hello World");
       System.Threading.Thread.Sleep(2000);// пауза 1000=секунда 
     }
}


каждые 2 секунды выдает сообщение: "Hello World"

Аватара пользователя
Den
Сообщения: 352
Зарегистрирован: 09 фев 2016, 15:52
Благодарил (а): 14 раз
Поблагодарили: 4 раза

Re: Зациклить работу робота

Непрочитанное сообщение Den » 23 ноя 2017, 12:15

Да, работает. Сообщения выдаются на М10 через секунду.

Аватара пользователя
Den
Сообщения: 352
Зарегистрирован: 09 фев 2016, 15:52
Благодарил (а): 14 раз
Поблагодарили: 4 раза

Re: Зациклить работу робота

Непрочитанное сообщение Den » 23 ноя 2017, 12:30

в таком виде при запуске на М10 не хочет работать, останавливает графики.

Код: Выделить всё

function Initialize()
{
StrategyName = "VAC_T";
AddInput("Input1", Inputs.Candle, 1, true, "");
LongLimit = 1;
ShortLimit = 1;
}

function OnUpdate()
{
while( true )
{
System.Threading.Thread.Sleep(2000); // пауза 1000 = секунда
}
var lastLVal = MY.индикатор(Input1.Close, 0, 0, 0, 0).GetLastValues("L", 1)[0];
var lastHVal = MY.индикатор(Input1.Close, 0, 0, 0, 0).GetLastValues("H", 1)[0];

{
// ПРАВИЛО 1
if ( (lastHVal.X > lastLVal.X ? lastHVal.Y : lastLVal.Y) == (MY.индикатор(Input1.Close, 0, 0, 0, 0).GetLastValues("L", 1)[0].Y) )
{
EnterLongLimit(GetLast());
}
// ПРАВИЛО 2
if ( (lastHVal.X > lastLVal.X ? lastHVal.Y : lastLVal.Y) == (MY.индикатор(Input1.Close, 0, 0, 0, 0).GetLastValues("H", 1)[0].Y) )
{
EnterShortLimit(GetLast());
}
}
}



Arteshka
Сообщения: 71
Зарегистрирован: 10 ноя 2017, 12:43
Благодарил (а): 3 раза
Поблагодарили: 2 раза

Re: Зациклить работу робота

Непрочитанное сообщение Arteshka » 23 ноя 2017, 12:44

Попробуйте сменить индикатор на стандартный( ради эксперимента) скорее всего дело в нем, он грузит. Или попробуйте вообще убрать индикатор.

Аватара пользователя
Den
Сообщения: 352
Зарегистрирован: 09 фев 2016, 15:52
Благодарил (а): 14 раз
Поблагодарили: 4 раза

Re: Зациклить работу робота

Непрочитанное сообщение Den » 23 ноя 2017, 12:54

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

То есть он работает только на выдачу сообщений, торговые сигналы он не подаёт.

Код: Выделить всё

function Initialize()
{
   StrategyName = "Alfa_AO";
   AddParameter("Pfast", 8, "", 1);
   AddParameter("Pslow", 35, "", 1);
   AddInput("Input1", Inputs.Candle, 1, true);
   LongLimit = 0;
   ShortLimit = 0;
   AddChartIndicator("AwesomeOscillator", new Dictionary <string, string>{{"Fast", "Pfast"},{"Slow", "Pslow"}});
}

function OnUpdate()
{
while( true )
{
System.Threading.Thread.Sleep(2000); // пауза 1000 = секунда
}
   /// ПРАВИЛО 1
   if ( (AO(Input1, Pfast, Pslow) > AO(Input1, Pfast, Pslow)[1]) )
   {
      EnterLong();
   }

   /// ПРАВИЛО 2
   if ( (AO(Input1, Pfast, Pslow) < AO(Input1, Pfast, Pslow)[1]) )
   {
      EnterShort();
   }

}



Arteshka
Сообщения: 71
Зарегистрирован: 10 ноя 2017, 12:43
Благодарил (а): 3 раза
Поблагодарили: 2 раза

Re: Зациклить работу робота

Непрочитанное сообщение Arteshka » 23 ноя 2017, 13:46

А так...?

Код: Выделить всё

function Initialize()
{
   StrategyName = "Alfa_AO";
   AddParameter("Pfast", 8, "", 1);
   AddParameter("Pslow", 35, "", 1);
   AddInput("Input1", Inputs.Candle, 60, true, "SBER=МБ ЦК");
   LongLimit = 0;
   ShortLimit = 0;
   AddChartIndicator("AwesomeOscillator", new Dictionary <string, string>{{"Fast", "Pfast"},{"Slow", "Pslow"}});
}

function OnUpdate()
{
 while( true)
   {
    ShowMessage("РАБОТАЕТ!!!");
    /// ПРАВИЛО 1
    if ( (AO(Input1, Pfast, Pslow) > AO(Input1, Pfast, Pslow)[1]) )
       {
       //   EnterLong();
       }

       /// ПРАВИЛО 2
   if ( (AO(Input1, Pfast, Pslow) < AO(Input1, Pfast, Pslow)[1]) )
      {
        //EnterShort();
         }
      System.Threading.Thread.Sleep(10000);
   }      

}

Виснит???


Вернуться в «Стратегии и роботы»

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и 11 гостей