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



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

СообщениеДобавлено: Вс Июл 21, 2019 4:10 pm Ответить с цитатой Вернуться к началу

Во вложении картинка в файле "RobotErrorNew4.png" для этого сообщения: http://amisite.ru/phpBB2/viewtopic.php?p=25555#25555
Посмотреть профиль Отправить личное сообщение
il-ir



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

СообщениеДобавлено: Вс Июл 21, 2019 4:55 pm Ответить с цитатой Вернуться к началу

В общем, так - получилось.

Использую старый плагин AS_File.dll отсюда: http://www.amisite.ru/files/as_file.php.
Использую плагин AS_QuikTrade.dll отсюда: http://www.amisite.ru/files/as_quik_afl.php.

Код такой:
Код:

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


Вроде всё работает (заявки в квик передаются, сделки в файл "Quik_Robot.ini" пишутся), отчёт пишется в файл "log.quik".

При использовании новой версии плагина AS_File почему-то отчёт писался в файл "log.quik.txt", а не в файл "log.quik", хотя код не менялся Embarassed :
Код:

if (TimeFrame == Interval() AND Permit_Ticker)
{
   if(Buy1[BarCount-1] AND pos == 0) {
      str = str + "  Buy";
      sd = "Buy";
      orders("B", round(C[BarCount-1]) + Otstup, Lots);
      AS_WRITE_FILE("log.quik", str);
   }
   else if(Sell1[BarCount-1] AND pos > 0) {
      str = str + "  Sell";
      sd = "Sell";
      orders("S", round(C[BarCount-1]) - Otstup, abs(pos));
      AS_WRITE_FILE("log.quik", str);
   }
   else if(Short1[BarCount-1] AND pos == 0) {
      str = str + "  Short";
      sd = "Short";
      orders("S", round(C[BarCount-1]) - Otstup, Lots);
      AS_WRITE_FILE("log.quik", str);
   }
   else if(Cover1[BarCount-1] AND pos < 0) {
      str = str + "  Cover";
      sd = "Cover";
      orders("B", round(C[BarCount-1]) + Otstup, abs(pos));
      AS_WRITE_FILE("log.quik", str);
   }
   else if(Buy2[BarCount-1] AND pos > 0 AND pos < LimB AND BarID != SdID) {
      str = str + "  Buy (доливка)";
      sd = "BuyIn";
      orders("B", round(C[BarCount-1]) + Otstup, Lots);
      AS_WRITE_FILE("log.quik", str);
   }
   else if(Short2[BarCount-1] AND pos < 0 AND abs(pos) < LimS AND BarID != SdID) {
      str = str + "  Short (доливка)";
      sd = "ShortIn";
      orders("S", round(C[BarCount-1]) - Otstup, Lots);
      AS_WRITE_FILE("log.quik", str);
   }

}
else if(TimeFrame != Interval()) {
   PopupWindow( "Не соответствует временной интервал в настройках АА и в коде",
                     "ошибка", timeout = 5, left = -1, top = -1 );
}
Посмотреть профиль Отправить личное сообщение
ce_ser



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

СообщениеДобавлено: Пн Июл 22, 2019 7:25 am Ответить с цитатой Вернуться к началу

Не пробовал Qk-Trade.zip из http://amisite.ru/phpBB2/viewtopic.php?t=1902 ?

_________________
"Умер сам - помоги другому"
Посмотреть профиль Отправить личное сообщение
il-ir



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

СообщениеДобавлено: Пн Июл 22, 2019 12:56 pm Ответить с цитатой Вернуться к началу

ce_ser писал(а):
Не пробовал Qk-Trade.zip из http://amisite.ru/phpBB2/viewtopic.php?t=1902 ?

Нет. Напишите руководство пользователя?
Хотя бы короткое?

Мне бы с роботом Олега при наличии подробной инструкции разобраться. Embarassed

У меня получается с роботом Олега так:
Беру робота отсюда: http://www.amisite.ru/afl/exp/0004.php
Текст робота с моими правками - указанием доступа к учебному счёту - во вложении, файл "Quik_Robot3.afl"
Плагин AS_File отсюда: http://www.amisite.ru/files/plugins/AS_File_New.zip
Плагин AS_QuikTrade отсюда: http://www.amisite.ru/files/plugins/AS_QuikTrade.zip

Сначала возникает проблема, описанная тут: http://amisite.ru/phpBB2/viewtopic.php?p=25553#25553

Изменил в коде использование функции
AS_WRITE_PARAM("Quik_Robot", Name(), "pos", .....);
на
AS_WRITE_PARAM("Quik_Robot", Name(), "pos", ..... , 0);

Появилась проблема, описанная тут: http://amisite.ru/phpBB2/viewtopic.php?p=25555#25555

Помимо этого, у меня используемый плагин AS_File при выполнении AS_WRITE_FILE("log.quik", str); почему-то выводит в файл "log.quik.txt", хотя в инструкции (http://www.amisite.ru/files/as_file_new.php) Олег написал: "Имя файла задается вместе с расширением".

Что вот мне не понятно - судя по форуму, у всех всё работает с этими плагинами.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Ничего не понимаю. Ты же вроде написал
Цитата:
Вроде всё работает (заявки в квик передаются, сделки в файл "Quik_Robot.ini" пишутся), отчёт пишется в файл "log.quik".

???

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



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

СообщениеДобавлено: Пн Июл 22, 2019 8:06 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Ничего не понимаю. Ты же вроде написал
Цитата:
Вроде всё работает (заявки в квик передаются, сделки в файл "Quik_Robot.ini" пишутся), отчёт пишется в файл "log.quik".

???

Это работает, если я использую версию плагина AS_File самую первую, вот с этой страницы: http://www.amisite.ru/files/as_file.php:
il-ir писал(а):
В общем, так - получилось.

Использую старый плагин AS_File.dll отсюда: http://www.amisite.ru/files/as_file.php.


А с новой, обновлённой, версией плагина AS_File вот отсюда http://www.amisite.ru/files/as_file_new.php у меня ничего не получилось.

Ты же сделал новую версию этого плагина - значит она нужнее старой Smile

Вот я из-за этого и переживаю, что никак не могу заставить работать новую версию плагина - хотя как я понимаю - другие форумчане её, новую версию, используют. И у меня появляется ощущение, что у меня где-то что-то неправильно делается. И это ощущение потенциальной или реальной ошибки напрягает Sad
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Июл 22, 2019 9:54 pm Ответить с цитатой Вернуться к началу

Я ща очень занят. Немного освобожусь и помогу....

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



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

СообщениеДобавлено: Чт Июл 25, 2019 11:24 am Ответить с цитатой Вернуться к началу

Олег, вопрос по коду.
В коде робота http://www.amisite.ru/afl/exp/files/Quik_Robot3.afl написано:
Код:
///////////    Функции  ////////////

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,
                                           Lot);
    }

    if(StrToNum(order) > 100)
    {
        iz = "исполнена";
..........
        str = str + "  позиция на момент исполнения " + pos;
    }
    else {
        iz = "не исполнена";
        coloriz = colorRed;
        str = str + "  заяка НЕ исполнена" + " ответ сервера=" + order;
    }
}


Если есть соединение с сервером, то всё нормально.
А если нет соединения, то как себя поведёт условие
Код:
if(StrToNum(order) > 100)

?

Если я правильно понял код, то переменная order получает какое-то значение, только если connection == 1 (если есть соединение с сервером квика):
Код:
    if(connection == 1)
    {
        order = AS_QUIK_SEND_SYNC_NEWORDER("123",           // OrderID - Любые цифры
.......
                                           Lot);
    }

В случае, если connection == 0 (когда появляются проблемы при присоединении к серверу), то переменная order не определена?
Или я не правильно понял код функции orders(bs, pr, Lot)?

Как себя поведет StrToNum(order), если аргумент не определён?
В справке это не отражено Sad
Посмотреть профиль Отправить личное сообщение
il-ir



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

СообщениеДобавлено: Чт Июл 25, 2019 4:14 pm Ответить с цитатой Вернуться к началу

Олег, я опять с вопросом.

В коде робота (исходник - http://www.amisite.ru/afl/exp/files/Quik_Robot3.afl) у меня написано:
Код:
TimeFrame        = 60*1;               // таймфрейм в секундах.

............

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

Buy1 = Cross(C, MA(C, 40)) AND C > MA(C, 20);
Sell1 = Cross(MA(C, 20), C);
Short1 = Cross(MA(C, 40), C) AND C < MA(C, 20);
Cover1 = Cross(C, MA(C, 20));

Buy2 = Cross(MA(C, 2), MA(C, 5));
Short2 = Cross(MA(C, 5), MA(C, 3));

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

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

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

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


По моим задумкам, робот должен торговать минутным интервалом - то есть, внутри минутного диапазона игнорировать сигналы.
Временной интервал в настройках АА и в коде соответствуют друг другу - везде установлен одно минутный интервал.

Но в файле log.quik указываются сделки:
Цитата:
25.07.2019 14:36:19 SBER Cover заяка исполнена ответ сервера=4434446969 позиция на момент исполнения -10
25.07.2019 14:36:20 SBER Buy заяка исполнена ответ сервера=4434446998 позиция на момент исполнения 0
25.07.2019 14:36:21 SBER Buy (доливка) заяка исполнена ответ сервера=4434447011 позиция на момент исполнения 10
25.07.2019 14:37:18 LKOH Cover заяка исполнена ответ сервера=4434448524 позиция на момент исполнения -2
25.07.2019 14:37:19 LKOH Buy заяка исполнена ответ сервера=4434448543 позиция на момент исполнения 0
25.07.2019 14:37:20 LKOH Buy (доливка) заяка исполнена ответ сервера=4434448595 позиция на момент исполнения 1

Соответственно, в рамках ОДНОЙ минуты проходит по три сделки.

Что и где мне подкрутить в роботе, чтоб сигналы внутри выбранного интервала игнорировались?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Июл 25, 2019 4:59 pm Ответить с цитатой Вернуться к началу

Следует запретить несколько сигналов на одном баре.
По принципу.
Код:
Buy2 = Cross(MA(C, 2), MA(C, 5)) AND Buy1 = 0;

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



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

СообщениеДобавлено: Вс Июл 28, 2019 3:57 pm Ответить с цитатой Вернуться к началу

Олег, спасибо!
Думал по поводу сигналов и только сейчас, после твоего ответа, сообразил, что это ТРИ РАЗНЫХ сигнала:
1. Cover - сигнал Cover1.
2. Buy - сигнал Buy1.
3. Buy (доливка) - сигнал Buy2.

А я всё пытался понять, почему не сработал (или не понятно как сработал) оператор
Код:
... = Ref(..., -1);
Посмотреть профиль Отправить личное сообщение
Romich



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

СообщениеДобавлено: Вт Июл 21, 2020 1:30 pm Ответить с цитатой Вернуться к началу

Доброго дня!

При проверке кода AFL вылетают ошибки (см. рисунки). Плагин установлен новый. Что может быть не так?
Посмотреть профиль Отправить личное сообщение
Romich



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

СообщениеДобавлено: Вт Июл 21, 2020 1:31 pm Ответить с цитатой Вернуться к началу

Второй скрин
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Июл 21, 2020 3:57 pm Ответить с цитатой Вернуться к началу

Похоже плагин не работает. Ами не х64 ???

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



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

СообщениеДобавлено: Вт Июл 21, 2020 4:23 pm Ответить с цитатой Вернуться к началу

Ами - версия 6.20.1 на х32.
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen