Страница 1 из 3
Зациклить работу робота
Добавлено: 22 ноя 2017, 22:18
Arteshka
Всем привет!!!
Кому интересно, можно попробовать зациклить робота на более частое выполнение. Сделать тайминг.
Пример ниже запускает робота на выпjлнение каждую секунду. Не надо ждать нового бара.
Код: Выделить всё
function OnUpdate()
{
while( true )
{
ShowMessage( "Hello World");
System.Threading.Thread.Sleep(2000);// пауза 1000=секунда
}
}
Re: Зациклить работу робота
Добавлено: 23 ноя 2017, 01:02
Den
и что работает? Пробовали ?
On Update срабатывает только за закрытии бара.
Внутри бара исполнения нет до сих пор, хотя ждут многие этого.
Re: Зациклить работу робота
Добавлено: 23 ноя 2017, 08:14
Arteshka
Стоит попробовать!
Re: Зациклить работу робота
Добавлено: 23 ноя 2017, 11:07
Den
нет,не работает.
Кроме того, запущенный советник остановил графики почему-то.
Re: Зациклить работу робота
Добавлено: 23 ноя 2017, 11:21
Arteshka
У меня все работает. Вот код робота, не индикатора и без вызова индикатора:
Код: Выделить всё
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"
Re: Зациклить работу робота
Добавлено: 23 ноя 2017, 12:15
Den
Да, работает. Сообщения выдаются на М10 через секунду.
Re: Зациклить работу робота
Добавлено: 23 ноя 2017, 12:30
Den
в таком виде при запуске на М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());
}
}
}
Re: Зациклить работу робота
Добавлено: 23 ноя 2017, 12:44
Arteshka
Попробуйте сменить индикатор на стандартный( ради эксперимента) скорее всего дело в нем, он грузит. Или попробуйте вообще убрать индикатор.
Re: Зациклить работу робота
Добавлено: 23 ноя 2017, 12:54
Den
от индикатора тут не зависит вот с таким встроенным альфовским тоже самое происходит.
То есть он работает только на выдачу сообщений, торговые сигналы он не подаёт.
Код: Выделить всё
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();
}
}
Re: Зациклить работу робота
Добавлено: 23 ноя 2017, 13:46
Arteshka
А так...?
Код: Выделить всё
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);
}
}
Виснит???