Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Робот для Квика через API Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
FriendlyDeepSpace



Зарегистрирован: 07.12.2018
Сообщения: 34

СообщениеДобавлено: Чт Дек 27, 2018 8:02 pm Ответить с цитатой Вернуться к началу

При этом, если забить на ошибку и закрыть предупреждение,
передача команд происходит, но только в одну сторону - на покупку.
Когда покупка по сигналу - то выходит ошибка, закрытие - передает команду, в квике сделка.
На новом сигнале снова и т.п.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Чт Дек 27, 2018 8:25 pm Ответить с цитатой Вернуться к началу

Хм. Блин, в код всралась очепятка. Потерялась скобка. Надо так
Код:

   if(StrToNum(order) > 100)
   {
      iz = "исполнена";
      coloriz = colorGreen;
      str = str + "  заяка исполнена" + " ответ сервера=" + order;
      if(pos > 0 AND bs == "S")                // закрытие лонга
         AS_WRITE_PARAM("Quik_Robot", Name(), "pos", 0, 0);
      else if(pos == 0 AND bs == "S")         // шорт
         AS_WRITE_PARAM("Quik_Robot", Name(), "pos", -1*Lot, 0);
      else if(pos < 0 AND bs == "B")          // закрытие шорта
         AS_WRITE_PARAM("Quik_Robot", Name(), "pos", 0, 0);
      else if(pos == 0 AND bs == "B")       // лонг
         AS_WRITE_PARAM("Quik_Robot", Name(), "pos", Lot, 0);
      str = str + "  позиция на момент исполнения " + pos;
   }
   else {
      iz = "не исполнена";
      coloriz = colorRed;
      str = str + "  заяка НЕ исполнена" + " ответ сервера=" + order;
   }

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
FriendlyDeepSpace



Зарегистрирован: 07.12.2018
Сообщения: 34

СообщениеДобавлено: Чт Дек 27, 2018 8:42 pm Ответить с цитатой Вернуться к началу

Верно, предупреждение синтаксиса ушло.
Осталось только понять почему не проходят сделки.
Когда наступает сигнал к покупке, вижу сообщение об ошибке (в приложении).
Если его закрыть, то сразу происходит покупка, и в квике проходит сделка.
Когда наступает сигнал к закрытию покупки, то уже ничего не происходит. Такие дела.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Чт Дек 27, 2018 9:48 pm Ответить с цитатой Вернуться к началу

Есть 2 плагина AS_File. В одном в параметрах используется 3 аргумента, а в другом 4 (добавлена точность). У тебя плагин с тремя аргументами, а код для нового с 4мя. Поэтому он и ругается (слишком много аргументов).

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
FriendlyDeepSpace



Зарегистрирован: 07.12.2018
Сообщения: 34

СообщениеДобавлено: Чт Дек 27, 2018 9:57 pm Ответить с цитатой Вернуться к началу

Странно, плагины со страницы робота. Наверное там ссылку поменять надо на соответствующий вариант. Где его найти? Или может надо просто поправить текст Робота?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Чт Дек 27, 2018 10:47 pm Ответить с цитатой Вернуться к началу

http://www.amisite.ru/files/plug.php

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Чт Дек 27, 2018 10:52 pm Ответить с цитатой Вернуться к началу

Когда я писал этого робота, я меньше всего думал о том, что кто-то рискнет поставить свои деньги на скрипт не разобравшись в его работе досконально. В общем это только мое видение того, как может работать такая идея.
Но однозначно поменять ссылку стоит.
Very Happy

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
FriendlyDeepSpace



Зарегистрирован: 07.12.2018
Сообщения: 34

СообщениеДобавлено: Чт Дек 27, 2018 10:54 pm Ответить с цитатой Вернуться к началу

Спасибо! Завтра обязательно протестирую.
Посмотреть профиль Отправить личное сообщение
FriendlyDeepSpace



Зарегистрирован: 07.12.2018
Сообщения: 34

СообщениеДобавлено: Чт Дек 27, 2018 11:02 pm Ответить с цитатой Вернуться к началу

Цитата:
Когда я писал этого робота, я меньше всего думал о том, что кто-то рискнет поставить свои деньги на скрипт не разобравшись в его работе досконально. В общем это только мое видение того, как может работать такая идея.
Но однозначно поменять ссылку стоит.


Ну постепенно начинает проясняться его суть) Суть доходила бы намного быстрей, если бы я был программистом с опытом) Но тогда бы я видимо сам написал бы себе коннектор Very Happy
Посмотреть профиль Отправить личное сообщение
FriendlyDeepSpace



Зарегистрирован: 07.12.2018
Сообщения: 34

СообщениеДобавлено: Пт Дек 28, 2018 4:43 pm Ответить с цитатой Вернуться к началу

Тестировал Робота с одной системой на 1 инструменте, все работает стабильно. Заметил, что отсчет 'Run every" не равен условию "1 раз за свечу на ее открытии", и выполняется, собственно, как таймер после клика мышки. Т.е. от этого могут быть сигналы в середине жизни свечи, в зависимости от того, когда нажать кнопку, и единственным выходом будет использование 1sec периода, и закладывание при разработке большего проскальзывания на величину средней сделки, т.к. переворот позиции совершается на одной сделкой, а двумя, как я заметил, с соответствующим перерывом в секунду.
Параллельно изучаю твой код. Начал переделывать его на вариант "две системы", нашел пример тут на форуме, где ты подсказываешь человеку как это сделать. По примеру делаю свой вариант под свою версию плагина.
Не понял одного момента с циклами и переменными в твоем примере - вот этими sys == 1, sys == 2, которые призваны разделить системы, и перед этим должны быть как-то и где-то заданы. Где - не понимаю.

На данный момент у меня такой тестовый код для Квика-юниора:

Код:
Filter = 1;

TimeFrame      = 60;               // таймфрейм в секундах.
Account         = "SPBFUT00754";   // Номер счета
Client_Code   = "SPBFUT00754";            // Код Клиента
Quik            = "C:\\QUIKJunior";         // путь к Квику


Tickers = "Si_Junior";             // торгуемые символы через запятую без пробелов. Для контроля ошибок. Так, как они называются в Ами


///////////////
// задаем размер лотов, коды и отступ для разных символов
/////////////

if(Name() == "Si_Junior") {            //Символ как он называется в Ами
   SecCode          = "SiH9";           
   Class               = "SPBFUT";
   Lots1               = 1;
   Lots2               = 1;
   TickS               = 1;               // Минимальный шаг цены торгуемой бумаги
   Otstup            = 100;               // Заявка будет выставлена хуже текущей цены на Otstup рублей
}


//////////////  Система-1  ///////////////

Buy1    = RSI(2)<30;
Sell1    = RSI(2)>70;
Buy1    = ExRem(Buy1, Sell1);
Sell1    = ExRem(Sell1, Buy1);
Short1    = Sell1;
Cover1    = Buy1;

/////////// Конец Системы-1 ////////////

Buy1    = Ref(Buy1, -1);
Sell1    = Ref(Sell1, -1);
Short1    = Ref(Short1, -1);
Cover1    = Ref(Cover1, -1);


//////////////  Система-2  ///////////////

Buy2    = C>O AND RSI(20)>50;
Sell2    = C<O;
Buy2    = ExRem(Buy2, Sell2);
Sell2    = ExRem(Sell2, Buy2);
Short2    = C<O AND RSI(20)<50;
Cover2    = C>O;

/////////// Конец Системы-2 ////////////

Buy2    = Ref(Buy2, -1);
Sell2    = Ref(Sell2, -1);
Short2    = Ref(Short2, -1);
Cover2    = Ref(Cover2, -1);

////////////////////////////////////////////

text    = iz = sd = order = "";
color    = coloriz = colorDefault;
price    = 0;
str    = Now(0) + "  " + Name();
pos1    = AS_READ_PARAM("Quik_Robot", Name(), "pos1");
pos2    = AS_READ_PARAM("Quik_Robot", Name(), "pos2");

///////////// проверка наличия символа в списке для торговли ////////////////

k = 0;
Permit_Ticker = False;
do {
  Tick = StrExtract(Tickers, k);
  k++;
  if(Name() == Tick)
    Permit_Ticker = True;
} while(Tick != "");

///////////    Функции  ////////////

procedure orders(bs, pr, Lot)
{
   connection = 0;

   QC = AS_QUIK_CONNECT (Quik);

   if (QC == 1)
   {
      connection = 1;
      text = "Есть соединение с сервером";
      Color = colorGreen;
   }
   else if (QC == -1)
   {
      text = "нет соединения с квиком";
      Color = colorRed;   
   }
   else if (QC == -2)
   {
      text = "нет соединения с сервером";
      Color = colorRed;
   }
   else
   {
      text = "фигня какая то";
      Color = colorRed;
   }
 
   if(connection == 1)
   {
      order = AS_QUIK_SEND_SYNC_NEWORDER( "123",      // OrderID - Любые цифры
                                 Account,
                                 Client_Code,
                                 "L",                           // Тип заявки M-рыночная, L-лимитированная
                                 Class,
                                 SecCode,
                                 bs,
                                 pr,
                                 TickS,
                                 Lot);
   }

   if(StrToNum(order) > 100)
   {
      iz = "исполнена";
      coloriz = colorGreen;
      str = str + "  заяка исполнена" + " ответ сервера=" + order;

      if(sys == 1)
      {
            if(pos1 > 0 AND bs == "S")                // закрытие лонга системы 1
               AS_WRITE_PARAM("Quik_Robot", Name(), "pos1", 0, 0);
            else if(pos1 == 0 AND bs == "S")         // шорт системы 1
               AS_WRITE_PARAM("Quik_Robot", Name(), "pos1", -1*Lot, 0);
            else if(pos1 < 0 AND bs == "B")          // закрытие шорта системы 1
               AS_WRITE_PARAM("Quik_Robot", Name(), "pos1", 0, 0);
            else if(pos1 == 0 AND bs == "B")       // лонг системы 1
               AS_WRITE_PARAM("Quik_Robot", Name(), "pos1", Lot, 0);
         str = str + "  позиция на момент исполнения " + pos1;
         }

//-------------------------------------------------------------------------------------------//

      else if(sys == 2)
      {
         if(pos2 > 0 AND bs == "S")                // закрытие лонга системы 2
               AS_WRITE_PARAM("Quik_Robot", Name(), "pos2", 0, 0);
            else if(pos2 == 0 AND bs == "S")         // шорт системы 2
               AS_WRITE_PARAM("Quik_Robot", Name(), "pos2", -1*Lot, 0);
            else if(pos2 < 0 AND bs == "B")          // закрытие шорта системы 2
               AS_WRITE_PARAM("Quik_Robot", Name(), "pos2", 0, 0);
            else if(pos2 == 0 AND bs == "B")       // лонг системы 2
               AS_WRITE_PARAM("Quik_Robot", Name(), "pos2", Lot, 0);
      str = str + "  позиция на момент исполнения " + pos2;
         }
   }
   else {
      iz = "не исполнена";
      coloriz = colorRed;
      str = str + "  заяка НЕ исполнена" + " ответ сервера=" + order;
   }
}

////////// конец Функций //////////

if (TimeFrame == Interval() AND Permit_Ticker)
{
   if(Buy1[BarCount-1] AND pos1 == 0) {
      str = str + "  Buy";
      sd = "Buy";
      orders("B", round(C[BarCount-1]) + Otstup, Lots1);
      AS_WRITE_FILE("log.quik", str);
   }
   else if(Sell1[BarCount-1] AND pos1 > 0) {
      str = str + "  Sell";
      sd = "Sell";
      orders("S", round(C[BarCount-1]) - Otstup, abs(pos1));
      AS_WRITE_FILE("log.quik", str);
   }
   else if(Short1[BarCount-1] AND pos1 == 0) {
      str = str + "  Short";
      sd = "Short";
      orders("S", round(C[BarCount-1]) - Otstup, Lots1);
      AS_WRITE_FILE("log.quik", str);
   }
   else if(Cover1[BarCount-1] AND pos1 < 0) {
      str = str + "  Cover";
      sd = "Cover";
      orders("B", round(C[BarCount-1]) + Otstup, abs(pos1));
      AS_WRITE_FILE("log.quik", str);
   }

   else if(Buy2[BarCount-1] AND pos2 == 0) {
      str = str + "  Buy";
      sd = "Buy";
      orders("B", round(C[BarCount-1]) + Otstup, Lots2);
      AS_WRITE_FILE("log.quik", str);
   }
   else if(Sell2[BarCount-1] AND pos2 > 0) {
      str = str + "  Sell";
      sd = "Sell";
      orders("S", round(C[BarCount-1]) - Otstup, abs(pos2));
      AS_WRITE_FILE("log.quik", str);
   }
   else if(Short2[BarCount-1] AND pos2 == 0) {
      str = str + "  Short";
      sd = "Short";
      orders("S", round(C[BarCount-1]) - Otstup, Lots2);
      AS_WRITE_FILE("log.quik", str);
   }
   else if(Cover2[BarCount-1] AND pos2 < 0) {
      str = str + "  Cover";
      sd = "Cover";
      orders("B", round(C[BarCount-1]) + Otstup, abs(pos2));
      AS_WRITE_FILE("log.quik", str);
   }
}
else if(TimeFrame != Interval()) {
   PopupWindow( "Не соответствует временной интервал в настройках АА и в коде",
                     "ошибка", timeout = 5, left = -1, top = -1 );
}

SetOption( "NoDefaultColumns", 1 );
AddTextColumn(Name(), "Символ", 1.0, colorDefault, colorDefault, 60);
AddColumn( C[BarCount-1], "Последняя цена", 1.2, colorDefault, colorDefault, 100 );
AddColumn( AS_READ_PARAM("Quik_Robot", Name(), "pos"), "Позиция", 1.0, colorDefault,
   IIf(AS_READ_PARAM("Quik_Robot", Name(), "pos") > 0, colorGreen,
   IIf(AS_READ_PARAM("Quik_Robot", Name(), "pos") < 0, colorRed, colorDefault)), 60);
AddTextColumn(sd, "Сигнал", 1.0, colorDefault, colorDefault, 60);
AddTextColumn(text, "Соединение", 1.2, colorDefault, color, 170);
AddTextColumn(iz, "Исполнение заявки", 1.2, colorDefault, coloriz, 120 );
AddTextColumn(order, "Заявка", 1.2, colorDefault, IIf(StrToNum(order) > 100, colorGreen, colorRed), 90);


Последний раз редактировалось: FriendlyDeepSpace (Сб Дек 29, 2018 12:10 am), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пт Дек 28, 2018 11:33 pm Ответить с цитатой Вернуться к началу

Дай ссылку на мое объяснение.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
FriendlyDeepSpace



Зарегистрирован: 07.12.2018
Сообщения: 34

СообщениеДобавлено: Пт Дек 28, 2018 11:51 pm Ответить с цитатой Вернуться к началу

http://www.amisite.ru/phpBB2/viewtopic.php?t=2244

Уточнение - я там опечатался, имелось в виду sys == 1, sys == 2, ругалось на это, ибо якобы не задано.
А сейчас открываю на проверку синтаксиса, и ничего про это! У Ами странно проверка ошибок идет, может молчать, пока не запустишь на онлайн-соединение. Точно сказать и проверить со скринами теперь смогу только завтра.
Посмотреть профиль Отправить личное сообщение
FriendlyDeepSpace



Зарегистрирован: 07.12.2018
Сообщения: 34

СообщениеДобавлено: Сб Дек 29, 2018 10:57 am Ответить с цитатой Вернуться к началу

Да, вот скрины. Запуск на олнайн подключении.
После первого сигнала - предпреждение, потом второе,
когда оба закрыл - вход в сделку, после шага таймера (стояло 5 сек)
снова предупреждения и снова вход. При этом в текущем объеме "ноль".
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Сб Дек 29, 2018 2:28 pm Ответить с цитатой Вернуться к началу

Как то так.
Код:

Filter = 1;

TimeFrame      = 60;               // таймфрейм в секундах.
Account         = "SPBFUT00754";   // Номер счета
Client_Code   = "SPBFUT00754";            // Код Клиента
Quik            = "C:\\QUIKJunior";         // путь к Квику


Tickers = "Si_Junior";             // торгуемые символы через запятую без пробелов. Для контроля ошибок. Так, как они называются в Ами


///////////////
// задаем размер лотов, коды и отступ для разных символов
/////////////

if(Name() == "Si_Junior") {            //Символ как он называется в Ами
   SecCode          = "SiH9";           
   Class               = "SPBFUT";
   Lots1               = 1;
   Lots2               = 1;
   TickS               = 1;               // Минимальный шаг цены торгуемой бумаги
   Otstup            = 100;               // Заявка будет выставлена хуже текущей цены на Otstup рублей
}


//////////////  Система-1  ///////////////

Buy1    = RSI(2)<30;
Sell1    = RSI(2)>70;
Buy1    = ExRem(Buy1, Sell1);
Sell1    = ExRem(Sell1, Buy1);
Short1    = Sell1;
Cover1    = Buy1;

/////////// Конец Системы-1 ////////////

Buy1    = Ref(Buy1, -1);
Sell1    = Ref(Sell1, -1);
Short1    = Ref(Short1, -1);
Cover1    = Ref(Cover1, -1);


//////////////  Система-2  ///////////////

Buy2    = C>O AND RSI(20)>50;
Sell2    = C<O;
Buy2    = ExRem(Buy2, Sell2);
Sell2    = ExRem(Sell2, Buy2);
Short2    = C<O AND RSI(20)<50;
Cover2    = C>O;

/////////// Конец Системы-2 ////////////

Buy2    = Ref(Buy2, -1);
Sell2    = Ref(Sell2, -1);
Short2    = Ref(Short2, -1);
Cover2    = Ref(Cover2, -1);

////////////////////////////////////////////

text    = iz1 = iz2 = sd1 = sd2 = order1 = order2 = "";
color    = coloriz = colorDefault;
price    = 0;
str    = Now(0) + "  " + Name();
pos1    = AS_READ_PARAM("Quik_Robot", Name(), "pos1");
pos2    = AS_READ_PARAM("Quik_Robot", Name(), "pos2");

///////////// проверка наличия символа в списке для торговли ////////////////

k = 0;
Permit_Ticker = False;
do {
  Tick = StrExtract(Tickers, k);
  k++;
  if(Name() == Tick)
    Permit_Ticker = True;
} while(Tick != "");

///////////    Функции  ////////////

procedure orders1(bs, pr, Lot)
{
   connection = 0;

   QC = AS_QUIK_CONNECT (Quik);

   if (QC == 1)
   {
      connection = 1;
      text = "Есть соединение с сервером";
      Color = colorGreen;
   }
   else if (QC == -1)
   {
      text = "нет соединения с квиком";
      Color = colorRed;   
   }
   else if (QC == -2)
   {
      text = "нет соединения с сервером";
      Color = colorRed;
   }
   else
   {
      text = "фигня какая то";
      Color = colorRed;
   }
 
   if(connection == 1)
   {
      order1 = AS_QUIK_SEND_SYNC_NEWORDER( "123",      // OrderID - Любые цифры
                                 Account,
                                 Client_Code,
                                 "L",                           // Тип заявки M-рыночная, L-лимитированная
                                 Class,
                                 SecCode,
                                 bs,
                                 pr,
                                 TickS,
                                 Lot);
   }

   if(StrToNum(order1) > 100)
   {
      iz1 = "исполнена";
      coloriz = colorGreen;
      str = str + "  заяка исполнена" + " ответ сервера=" + order;

      if(sys == 1)
      {
            if(pos1 > 0 AND bs == "S")                // закрытие лонга системы 1
               AS_WRITE_PARAM("Quik_Robot", Name(), "pos1", 0, 0);
            else if(pos1 == 0 AND bs == "S")         // шорт системы 1
               AS_WRITE_PARAM("Quik_Robot", Name(), "pos1", -1*Lot, 0);
            else if(pos1 < 0 AND bs == "B")          // закрытие шорта системы 1
               AS_WRITE_PARAM("Quik_Robot", Name(), "pos1", 0, 0);
            else if(pos1 == 0 AND bs == "B")       // лонг системы 1
               AS_WRITE_PARAM("Quik_Robot", Name(), "pos1", Lot, 0);
            str = str + "  позиция на момент исполнения " + pos1;
       }
   }
   else {
      iz1 = "не исполнена";
      coloriz = colorRed;
      str = str + "  заяка НЕ исполнена" + " ответ сервера=" + order;
   }
}

procedure orders2(bs, pr, Lot)
{
   connection = 0;

   QC = AS_QUIK_CONNECT (Quik);

   if (QC == 1)
   {
      connection = 1;
      text = "Есть соединение с сервером";
      Color = colorGreen;
   }
   else if (QC == -1)
   {
      text = "нет соединения с квиком";
      Color = colorRed;   
   }
   else if (QC == -2)
   {
      text = "нет соединения с сервером";
      Color = colorRed;
   }
   else
   {
      text = "фигня какая то";
      Color = colorRed;
   }
 
   if(connection == 1)
   {
      order2 = AS_QUIK_SEND_SYNC_NEWORDER( "123",      // OrderID - Любые цифры
                                 Account,
                                 Client_Code,
                                 "L",                           // Тип заявки M-рыночная, L-лимитированная
                                 Class,
                                 SecCode,
                                 bs,
                                 pr,
                                 TickS,
                                 Lot);
   }

   if(StrToNum(order2) > 100)
   {
      iz2 = "исполнена";
      coloriz = colorGreen;
      str = str + "  заяка исполнена" + " ответ сервера=" + order;

      if(sys == 1)
      {
            if(pos2 > 0 AND bs == "S")                // закрытие лонга системы 1
               AS_WRITE_PARAM("Quik_Robot", Name(), "pos2", 0, 0);
            else if(pos2 == 0 AND bs == "S")         // шорт системы 1
               AS_WRITE_PARAM("Quik_Robot", Name(), "pos2", -1*Lot, 0);
            else if(pos2 < 0 AND bs == "B")          // закрытие шорта системы 1
               AS_WRITE_PARAM("Quik_Robot", Name(), "pos2", 0, 0);
            else if(pos2 == 0 AND bs == "B")       // лонг системы 1
               AS_WRITE_PARAM("Quik_Robot", Name(), "pos2", Lot, 0);
            str = str + "  позиция на момент исполнения " + pos2;
       }
   }
   else {
      iz2 = "не исполнена";
      coloriz = colorRed;
      str = str + "  заяка НЕ исполнена" + " ответ сервера=" + order;
   }
}
////////// конец Функций //////////

if (TimeFrame == Interval() AND Permit_Ticker)
{
   if(Buy1[BarCount-1] AND pos1 == 0) {
      str = str + "  Sus1_Buy";
      sd = "Buy";
      orders1("B", round(C[BarCount-1]) + Otstup, Lots1);
      AS_WRITE_FILE("log.quik", str);
   }
   else if(Sell1[BarCount-1] AND pos1 > 0) {
      str = str + "  Sus1_Sell";
      sd = "Sell";
      orders1("S", round(C[BarCount-1]) - Otstup, abs(pos1));
      AS_WRITE_FILE("log.quik", str);
   }
   else if(Short1[BarCount-1] AND pos1 == 0) {
      str = str + "  Sus1_Short";
      sd = "Short";
      orders1("S", round(C[BarCount-1]) - Otstup, Lots1);
      AS_WRITE_FILE("log.quik", str);
   }
   else if(Cover1[BarCount-1] AND pos1 < 0) {
      str = str + "  Sus1_Cover";
      sd = "Cover";
      orders1("B", round(C[BarCount-1]) + Otstup, abs(pos1));
      AS_WRITE_FILE("log.quik", str);
   }

   if(Buy2[BarCount-1] AND pos2 == 0) {
      str = str + "  Sus2_Buy";
      sd = "Buy";
      orders2("B", round(C[BarCount-1]) + Otstup, Lots2);
      AS_WRITE_FILE("log.quik", str);
   }
   else if(Sell2[BarCount-1] AND pos2 > 0) {
      str = str + "  Sus2_Sell";
      sd = "Sell";
      orders2("S", round(C[BarCount-1]) - Otstup, abs(pos2));
      AS_WRITE_FILE("log.quik", str);
   }
   else if(Short2[BarCount-1] AND pos2 == 0) {
      str = str + "  Sus2_Short";
      sd = "Short";
      orders2("S", round(C[BarCount-1]) - Otstup, Lots2);
      AS_WRITE_FILE("log.quik", str);
   }
   else if(Cover2[BarCount-1] AND pos2 < 0) {
      str = str + "  Sus2_Cover";
      sd = "Cover";
      orders2("B", round(C[BarCount-1]) + Otstup, abs(pos2));
      AS_WRITE_FILE("log.quik", str);
   }
}
else if(TimeFrame != Interval()) {
   PopupWindow( "Не соответствует временной интервал в настройках АА и в коде",
                     "ошибка", timeout = 5, left = -1, top = -1 );
}

SetOption( "NoDefaultColumns", 1 );
AddTextColumn(Name(), "Символ", 1.0, colorDefault, colorDefault, 60);
AddColumn( C[BarCount-1], "Последняя цена", 1.2, colorDefault, colorDefault, 100 );
AddColumn( AS_READ_PARAM("Quik_Robot", Name(), "pos1"), "Позиция_1", 1.0, colorDefault,
   IIf(AS_READ_PARAM("Quik_Robot", Name(), "pos1") > 0, colorGreen,
   IIf(AS_READ_PARAM("Quik_Robot", Name(), "pos1") < 0, colorRed, colorDefault)), 60);
AddColumn( AS_READ_PARAM("Quik_Robot", Name(), "pos2"), "Позиция_2", 1.0, colorDefault,
   IIf(AS_READ_PARAM("Quik_Robot", Name(), "pos2") > 0, colorGreen,
   IIf(AS_READ_PARAM("Quik_Robot", Name(), "pos2") < 0, colorRed, colorDefault)), 60);
AddTextColumn(sd1, "Сигнал_1", 1.0, colorDefault, colorDefault, 60);
AddTextColumn(sd2, "Сигнал_2", 1.0, colorDefault, colorDefault, 60);
AddTextColumn(text, "Соединение", 1.2, colorDefault, color, 170);
AddTextColumn(iz1, "Исполнение заявки", 1.2, colorDefault, coloriz, 120 );
AddTextColumn(iz2, "Исполнение заявки", 1.2, colorDefault, coloriz, 120 );
AddTextColumn(order1, "Заявка_1", 1.2, colorDefault, IIf(StrToNum(order) > 100, colorGreen, colorRed), 90);
AddTextColumn(order2, "Заявка_2", 1.2, colorDefault, IIf(StrToNum(order) > 100, colorGreen, colorRed), 90);

Делал на скору руку. Не проверял...

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
FriendlyDeepSpace



Зарегистрирован: 07.12.2018
Сообщения: 34

СообщениеДобавлено: Сб Дек 29, 2018 3:14 pm Ответить с цитатой Вернуться к началу

Спасибо!
Результаты проверки:
Была ошибка про order, я на сколько понял не везде было разделено на order1, order2.
Я вроде сообразил, поправил - ошибка ушла, колонки видны и это хорошо кстати придумано.
Но осталась та же ошибка, что в прошлый раз - не находит sys отсюда if(sys == 1) и в результате на каждом цикле таймера происходит предупреждение, отправка сделки в Квик, но нет учета результата. Следующий тик - еще одна сделка, и так далее.
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen