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



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

СообщениеДобавлено: Вт Окт 04, 2011 9:11 pm Ответить с цитатой Вернуться к началу

Тестил плагин Олега для SmartCOM и вдруг осенило x))), что есть уже нечто для Quik, т.к. до смарта ещё деньги нужно кидать, а на Квике есть уже денежка, то решил посмотреть что там к чему, чужое брать стал (только для примера), цель была увидеть красивый tri файл (пока без обработки Quik'ом):

Код:
///////// Установки ///////////
SetBarsRequired(sbrAll, sbrAll);

TimeFrame   = 60;                  // таймфрейм в секундах.
Account   = "SPBFUT00XXX";   // ваш аккаунт на бирже
Client      = "SPBFUT00XXX";            // код клиента
Lots      = 1;                     // сколько лотов желаете торговать
Otstup      = 5;                     // абсолютное число для проскальзывания.
FileName   = "C:/Uralsib/QUIK/robot"; // слэши прямые!!! имя файла с транзакциями для квика
TransNum    = 0;
Classcode   = "SPBFUT";
SecCode    = "SRZ1";
sstr = "";



///////////////////////////////ЧИТАЕМ ПОЗИЦИЮ!/////////////
function ReadPos() {
 
   fh = fopen( "C:/Uralsib/QUIK/robot/robot.it", "r");
   if( fh ) {
     p = fgets( fh );
     p = StrToNum(p);
   }
   else {
     fh = fopen( "C:/Uralsib/QUIK/robot/robot.it", "w");
     fputs( "0", fh);
     p = 0;
   }
   fclose( fh );

   return p;
 }

///////////////////////////////ЗАПИСЫВАЕМ ПОЗИЦИЮ!//////////

procedure WritePos( q ) {
   fh = fopen( "C:/Uralsib/QUIK/robot/robot.it", "w");
   fputs( NumToStr( q, 1.0, False ), fh);
   fclose( fh ); }
///////////////////////////////////////////////////////////


//////////////////////CИСТЕМА 2///////////////////////
////ТЕСТИМ НА МИНУТКАХ ОЖИДАЕМ МНОГО-МНОГО ТРАНЗАКЦИЙ В ФАЙЛЕ TRI////////////////
bp = Open+1;
sp = Open-1;

LONG2 = Buy = (High > bp);
eXLONG2 = Sell = SP > Low;
////////////////////////////////////////////////////////

//////////// Формируем транзакцию.//////////////

procedure savetrifile(stransid,sstr)
{
   f = fopen(FileName, "r");
   found = 0;
   if(f)
   {
      while(!feof(f))
      {
         s = fgets(f);
         if(StrFind( s, stransid) > 0) found = 1;
      }
      fclose(f);
   }
   if (NOT found)
      {
         f = fopen(FileName, "a");
            if(f)
            {
               fputs(sstr+"\n",f);
               fclose(f);
            }
      }
}

/////////////////////ФОРМИРОВАНИЕ СТРОКИ//////////////


function makeandsave(ID, sOper, sprice)
{
   
   sstr =
   "ACCOUNT="          + Account + "; "+
   "CLIENT_CODE="       + Client + "; "+
   "TYPE=M; "            +
   "TRANS_ID="          + ID + "; "+
   "CLASSCODE="         +Classcode+"; "+
   "SECCODE="            +Name()+"; "+
   "ACTION=NEW_ORDER; "   +
   "OPERATION="         +sOper+"; "+
   "PRICE="            +NumToStr(sprice, 1.0, separator=False)+"; " +
   "QUANTITY="         +NumToStr(Lots, format = 1.0, separator=False)+"; "+
   
   savetrifile(ID, sstr);
}

pos = ReadPos();
if (TimeFrame == Interval() & FullName() != "")
{
   if(LONG2[BarCount-1] AND pos == 0)
   {
      price = LastValue(Close) + Otstup;
      ID = NumToStr(BarCount-1 ,1.0, separator = False);
      makeandsave(ID, "B", price);
      WritePos( 1 );
   }
   if(eXLONG2[BarCount-1] AND pos == 1)
   {
      price = LastValue(Close) - Otstup;
      ID = NumToStr(BarCount-1 ,1.0, separator = False);
      makeandsave(ID, "S", price);
      WritePos( 0 );


   }

}
else if (TimeFrame != Interval())
   PopupWindow( "Не соответствует временной интервал в настройках АА и в коде",
      "ошибка", timeout = 5, left = -1, top = -1 );
else
   PopupWindow( "Не задан двузначный номер в поле FullName", "ошибка", timeout = 15, left = -1, top = -1 );


Из изменений в коде Механизатора:
- торговля внутри бара
- запись позиции в файл (по причине торговли внутри бара)
- за ID транзакции берём номер бара (тут не уверен в правильности кода)
Систему взял тупую: купили/продали, хотел увидеть много-много строчек в tri файле.
НО ОН ТАК И ОСТАВАЛСЯ ПУСТОЙ! Только значение позиции менялось в файле robot.it
Посмотреть профиль Отправить личное сообщение ICQ Number
kosbar



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

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

Прикладываю afl файл, а то при копировании предыдущего сообщения у меня лично вместо комментариев одни вопросики.
Посмотреть профиль Отправить личное сообщение ICQ Number
kosbar



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

СообщениеДобавлено: Вт Окт 04, 2011 9:15 pm Ответить с цитатой Вернуться к началу

И ещё, я правильно понял, что первая часть procedure savetrifile ставит своей целью отсечь повторные транзакции?
Посмотреть профиль Отправить личное сообщение ICQ Number
spitfire



Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow

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

Вопрос - а чем не устраивает робот Олега или мой? Там тоже по сути можно входить внутри бара, прописывая требуемую цену для makeandsave. Единственно, что внутри 1 бара мы можем кинуть только 1 вид операции. (бай/селл/шорт/ковер).
Посмотреть профиль Отправить личное сообщение ICQ Number
000
Site Admin


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

СообщениеДобавлено: Вт Окт 04, 2011 10:32 pm Ответить с цитатой Вернуться к началу

kosbar писал(а):
И ещё, я правильно понял, что первая часть procedure savetrifile ставит своей целью отсечь повторные транзакции?

Да. Она проверяет не было ли уже строки с таким же transid и если была, то новая строка не записывается.

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



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

СообщениеДобавлено: Ср Окт 05, 2011 9:58 am Ответить с цитатой Вернуться к началу

spitfire писал(а):
Вопрос - а чем не устраивает робот Олега или мой? Там тоже по сути можно входить внутри бара, прописывая требуемую цену для makeandsave. Единственно, что внутри 1 бара мы можем кинуть только 1 вид операции. (бай/селл/шорт/ковер).
Ну, там добавляется эксель, идут какие-то перестановки заявки. Да и своё всегда проще сделать, чем в чужом разобраться. Т.к. под Смарт делал и разница только в том, что транзакции идут через файл.
000 писал(а):
Да. Она проверяет не было ли уже строки с таким же transid и если была, то новая строка не записывается.
А почему строка не идёт? Я в растерянности... Ошибки не вижу, файл прогоняется сканером на ура, ну т.е. без ошибок...
Посмотреть профиль Отправить личное сообщение ICQ Number
spitfire



Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow

СообщениеДобавлено: Ср Окт 05, 2011 11:21 am Ответить с цитатой Вернуться к началу

В файл не идет потому что скорее всего не выполняются условия в if. Надо как нить вывести в виде индикаторов/через Explore чему у тебя равняются значения pos и LONG2 c eXLONG2.
kosbar писал(а):
Да и своё всегда проще сделать, чем в чужом разобраться.
Не факт Smile
Посмотреть профиль Отправить личное сообщение ICQ Number
kosbar



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

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

Нашёл одну ошибку, но результат пока всё тот же ))))
Посмотреть профиль Отправить личное сообщение ICQ Number
spitfire



Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow

СообщениеДобавлено: Чт Окт 06, 2011 2:46 pm Ответить с цитатой Вернуться к началу

В том что LONG2 и eXLONG2 иногда равняются 1 я в этом уверен Smile Попробуй для эксперимента убрать из if pos - глянь, начнет ли писать везде где хай пробивает опен + 1?
Просто думаю что pos = ReadPos(); как то криво работает.
Посмотреть профиль Отправить личное сообщение ICQ Number
kosbar



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

СообщениеДобавлено: Чт Окт 06, 2011 5:36 pm Ответить с цитатой Вернуться к началу

В общем вроде разобрался. И пока вникал пришла идея на QPILE написать простенькую хрень, чтобы писалась позиция в файл. Получится что-то на вроде обратной связи, коряво конечно, там тоже будет интервал в 1 секунду, т.е. скорость обработки инфы и принятия решения дойдёт до 2-3 секунд, но для 5 минуток думаю достаточно.
Зато теперь можно дополнить робота перестановкой заявки или удалением не исполнившихся...
Если дотянутся руки (изучал, но так и не пользовал я этот QPILE), то выложу тут.

P.S. Вроде помогло pos[BarCount-1] == 0 и мелкие недочёты в формировании и записи строки убрал... Если кому надо выложу тут рабочку.
Посмотреть профиль Отправить личное сообщение ICQ Number
spitfire



Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow

СообщениеДобавлено: Чт Окт 06, 2011 6:14 pm Ответить с цитатой Вернуться к началу

kosbar писал(а):
P.S. Вроде помогло pos[BarCount-1] == 0 и мелкие недочёты в формировании и записи строки убрал... Если кому надо выложу тут рабочку.

Да не, спасиба, у нас уже есть рабочка и с перестановками заявок Very Happy
Посмотреть профиль Отправить личное сообщение ICQ Number
kosbar



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

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

spitfire писал(а):
Да не, спасиба, у нас уже есть рабочка и с перестановками заявок Very Happy
Smile
Просто я считаю, что раз уж использовать Excel, то использовать по максимуму, тогда и Ами будет не нужен. Ведь там есть VB. Либо не использовать совсем.
Посмотреть профиль Отправить личное сообщение ICQ Number
kosbar



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

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

kosbar писал(а):
Если дотянутся руки (изучал, но так и не пользовал я этот QPILE), то выложу тут.

Дотянулись! =)
Портфель читает таблицу "Ограничение по клиентским счетам" каждую секунду (чаще никак, условие в Квике выставляется), и записывает в файл с названием контракта чистую позицию по контракту.
Посмотреть профиль Отправить личное сообщение ICQ Number
Aleksandr



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

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

spitfire писал(а):
Вопрос - а чем не устраивает робот Олега или мой? Там тоже по сути можно входить внутри бара, прописывая требуемую цену для makeandsave. Единственно, что внутри 1 бара мы можем кинуть только 1 вид операции. (бай/селл/шорт/ковер).

Здравствуйте . А где робот Олега или твой ?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

роботы Олега

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen