Автор |
Сообщение |
kosbar
Зарегистрирован: 17.03.2009
Сообщения: 356
|
Тестил плагин Олега для 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 |
![](images/spacer.gif) |
kosbar
Зарегистрирован: 17.03.2009
Сообщения: 356
|
Прикладываю afl файл, а то при копировании предыдущего сообщения у меня лично вместо комментариев одни вопросики. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
![](images/spacer.gif) |
kosbar
Зарегистрирован: 17.03.2009
Сообщения: 356
|
И ещё, я правильно понял, что первая часть procedure savetrifile ставит своей целью отсечь повторные транзакции? |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
![](images/spacer.gif) |
spitfire
![](images/avatars/14059505354d4eba7b43982.jpg)
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
Вопрос - а чем не устраивает робот Олега или мой? Там тоже по сути можно входить внутри бара, прописывая требуемую цену для makeandsave. Единственно, что внутри 1 бара мы можем кинуть только 1 вид операции. (бай/селл/шорт/ковер). |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
![](images/spacer.gif) |
000
Site Admin
![](images/avatars/183029264847fb5337d4ea4.gif)
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
kosbar писал(а): |
И ещё, я правильно понял, что первая часть procedure savetrifile ставит своей целью отсечь повторные транзакции? |
Да. Она проверяет не было ли уже строки с таким же transid и если была, то новая строка не записывается. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
![](images/spacer.gif) |
kosbar
Зарегистрирован: 17.03.2009
Сообщения: 356
|
spitfire писал(а): |
Вопрос - а чем не устраивает робот Олега или мой? Там тоже по сути можно входить внутри бара, прописывая требуемую цену для makeandsave. Единственно, что внутри 1 бара мы можем кинуть только 1 вид операции. (бай/селл/шорт/ковер). |
Ну, там добавляется эксель, идут какие-то перестановки заявки. Да и своё всегда проще сделать, чем в чужом разобраться. Т.к. под Смарт делал и разница только в том, что транзакции идут через файл.
000 писал(а): |
Да. Она проверяет не было ли уже строки с таким же transid и если была, то новая строка не записывается. |
А почему строка не идёт? Я в растерянности... Ошибки не вижу, файл прогоняется сканером на ура, ну т.е. без ошибок... |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
![](images/spacer.gif) |
spitfire
![](images/avatars/14059505354d4eba7b43982.jpg)
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
В файл не идет потому что скорее всего не выполняются условия в if. Надо как нить вывести в виде индикаторов/через Explore чему у тебя равняются значения pos и LONG2 c eXLONG2.
kosbar писал(а): |
Да и своё всегда проще сделать, чем в чужом разобраться. |
Не факт ![Smile](images/smiles/icon_smile.gif) |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
![](images/spacer.gif) |
kosbar
Зарегистрирован: 17.03.2009
Сообщения: 356
|
Нашёл одну ошибку, но результат пока всё тот же )))) |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
![](images/spacer.gif) |
spitfire
![](images/avatars/14059505354d4eba7b43982.jpg)
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
В том что LONG2 и eXLONG2 иногда равняются 1 я в этом уверен Попробуй для эксперимента убрать из if pos - глянь, начнет ли писать везде где хай пробивает опен + 1?
Просто думаю что pos = ReadPos(); как то криво работает. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
![](images/spacer.gif) |
kosbar
Зарегистрирован: 17.03.2009
Сообщения: 356
|
В общем вроде разобрался. И пока вникал пришла идея на QPILE написать простенькую хрень, чтобы писалась позиция в файл. Получится что-то на вроде обратной связи, коряво конечно, там тоже будет интервал в 1 секунду, т.е. скорость обработки инфы и принятия решения дойдёт до 2-3 секунд, но для 5 минуток думаю достаточно.
Зато теперь можно дополнить робота перестановкой заявки или удалением не исполнившихся...
Если дотянутся руки (изучал, но так и не пользовал я этот QPILE), то выложу тут.
P.S. Вроде помогло pos[BarCount-1] == 0 и мелкие недочёты в формировании и записи строки убрал... Если кому надо выложу тут рабочку. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
![](images/spacer.gif) |
spitfire
![](images/avatars/14059505354d4eba7b43982.jpg)
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
kosbar писал(а): |
P.S. Вроде помогло pos[BarCount-1] == 0 и мелкие недочёты в формировании и записи строки убрал... Если кому надо выложу тут рабочку. |
Да не, спасиба, у нас уже есть рабочка и с перестановками заявок ![Very Happy](images/smiles/icon_biggrin.gif) |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
![](images/spacer.gif) |
kosbar
Зарегистрирован: 17.03.2009
Сообщения: 356
|
spitfire писал(а): |
Да не, спасиба, у нас уже есть рабочка и с перестановками заявок ![Very Happy](images/smiles/icon_biggrin.gif) |
Просто я считаю, что раз уж использовать Excel, то использовать по максимуму, тогда и Ами будет не нужен. Ведь там есть VB. Либо не использовать совсем. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
![](images/spacer.gif) |
kosbar
Зарегистрирован: 17.03.2009
Сообщения: 356
|
kosbar писал(а): |
Если дотянутся руки (изучал, но так и не пользовал я этот QPILE), то выложу тут. |
Дотянулись! =)
Портфель читает таблицу "Ограничение по клиентским счетам" каждую секунду (чаще никак, условие в Квике выставляется), и записывает в файл с названием контракта чистую позицию по контракту. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
![](images/spacer.gif) |
Aleksandr
Зарегистрирован: 13.11.2011
Сообщения: 99
|
spitfire писал(а): |
Вопрос - а чем не устраивает робот Олега или мой? Там тоже по сути можно входить внутри бара, прописывая требуемую цену для makeandsave. Единственно, что внутри 1 бара мы можем кинуть только 1 вид операции. (бай/селл/шорт/ковер). |
Здравствуйте . А где робот Олега или твой ? |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
000
Site Admin
![](images/avatars/183029264847fb5337d4ea4.gif)
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
роботы Олега |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
![](images/spacer.gif) |
|