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


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

СообщениеДобавлено: Ср Фев 26, 2014 8:04 am Ответить с цитатой Вернуться к началу

Ну, в принципе можно исполнить такой сигнал. Только имей ввиду, что они мало того, что появляются задним числом, так еще и могут пропадать. Т.е. робот у тебя сделку совершил, а потом бактэст ее не подтвердит.

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



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

СообщениеДобавлено: Ср Фев 26, 2014 11:13 am Ответить с цитатой Вернуться к началу

Добрый день Олег!

Извини пожалуйста, что не ответил сразу уже не было сил в такое позднее (или раннее) время.

Буду очень благодарен, если у тебя получиться сделать. Ещё если можно с кратким пояснениям (небольшой ликбез), чтобы в следующий раз знать куда копать.

А то, что она иногда перерисовывает сигналы меня это устраивает. Так то любая торговая система может ошибаться, как и человек. А сделаю фильтр этих ошибок будет меньше.

И Большущее Спасибо за то время которое, ты мне уделяешь. Буду очень благодарен если получиться решить. Very Happy
Посмотреть профиль Отправить личное сообщение
Skornet



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

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

Добрый вечер Олег!

Вы про меня забыли или не решается? Crying or Very sad
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Фев 27, 2014 12:27 am Ответить с цитатой Вернуться к началу

В общем отослал. Только сразу говорю. Ничего хорошего из этого не получится.
Ну попробуй.

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



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

СообщениеДобавлено: Чт Фев 27, 2014 1:35 am Ответить с цитатой Вернуться к началу

Спасибо Вам Олег Большое ещё раз. Попробую завтра и отпишусь.

Я 5 минут назад увидел сообщение. Посмотрел Hold в хелпе, но так ни хрена и не понял сути, хотя хелп в переводе от i-ir по-моему.

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


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

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

Значит он его не прочитал.
Сообщения в личку после отправки попадает в исходящие и лежит там до тех пор пока адресат не прочитает. После прочтения уходит в отправленные.

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



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

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

Зря конечно вы тут занимаетесь ковырянием системы с заглядыванием в будущее. Scornet, в реале она покажет только слив, так как реальная торговля не будет совпадать с бектестом, и обязательно в худшую сторону.
Посмотреть профиль Отправить личное сообщение ICQ Number
BFG



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

СообщениеДобавлено: Вт Мар 18, 2014 9:34 am Ответить с цитатой Вернуться к началу

Добрый день, уважаемый!

Благодарю за сей полезный ресурс и выложенного робота через апишку!Smile

Прошу помочь в следующем:
нашел на бескрайних просторах инета системку, оттестил результаты порадовали. В робота внес параметры системы:

//===============system================
k = Optimize("K",Param("K",2,0.25,5,0.25),0.25,5,0.25);
Per= Optimize("atr",Param("atr",20,3,20,1),3,20,1);
HACLOSE=(O+H+L+C)/4;
HaOpen = AMA( Ref( HaClose, -1 ), 0.5 );
HaHigh = Max( H, Max( HaClose, HaOpen ) );
HaLow = Min( L, Min( HaClose, HaOpen ) );

Plot(NW, "", IIf(Trend == 1, 27, 4), 4);
Buy=NW<HACLOSE;
Sell=NW>HACLOSE;
SellPrice=ValueWhen(Sell,C,1);
BuyPrice=ValueWhen(Buy,C,1);
Buy=ExRem(Buy,Sell);
Sell=ExRem(Sell,Buy );

Short=Sell;
Cover=Buy;
=========
Но заявки робот не ставит. Если добавить вот этот кусочек:

Buy = Ref(Buy, -1);
Sell = Ref(Sell, -1);
Short = Ref(Short, -1);
Cover = Ref(Cover, -1);

то ставит, но если систему с данным куском прогнать в бэктесте результаты становятся мягко говоря не очень.Проверял на тесте как ставятся заявки, визуально норм, но на бою както стремно Smile
Вопрос: это нормальное положение дел или забыть о такой системе и ставить руками?Smile
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Мар 18, 2014 12:41 pm Ответить с цитатой Вернуться к началу

Привет.
В твоей системе есть 2 строки
SellPrice=ValueWhen(Sell,C,1);
BuyPrice=ValueWhen(Buy,C,1);

Это какая то бессмысленная фигня.

Кроме того я не понял что такое NW.

Про тестирование системы.
В робота необходимо добавлять
Buy = Ref(Buy, -1);
Sell = Ref(Sell, -1);
Short = Ref(Short, -1);
Cover = Ref(Cover, -1);

Можно и протестировать с таким дополнением, но тогда цены сделок должны быть по Open свечи.

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



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

СообщениеДобавлено: Вт Мар 18, 2014 2:34 pm Ответить с цитатой Вернуться к началу

NW - это из индюка, который описан же в этой же системе.
В общем во вложении она целиком со всякимим приблудами. Из нее я и пытаюсь сделать робота. Если у тебя будут предложения как ее оптимизировать и т.д. буду признателен Smile

То есть 2 строки:
SellPrice=ValueWhen(Sell,C,1);
BuyPrice=ValueWhen(Buy,C,1);
вообще можно убрать?

Ты писал: Можно и протестировать с таким дополнением, но тогда цены сделок должны быть по Open свечи. - то есть если в настройках бэк теста поставить цены сделок по 'Open', то результаты должны сойтись с эталонной системой?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Мар 18, 2014 4:48 pm Ответить с цитатой Вернуться к началу

Да. При условии, что в системе не будет строк
SellPrice=...;
BuyPrice=...;

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



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

СообщениеДобавлено: Сб Мар 22, 2014 10:39 am Ответить с цитатой Вернуться к началу

Опять нужна твоя помощь, есть код:
Код:
SD = StochD(8, 3, 3);
MH = MACD(8, 21) - Signal(8, 21, 5);
trendup = IIf(MH > 0 OR (MH > 0 AND MH > Ref(MH, -1)) AND RSI(3) >50 AND SD < 80 AND SD > Ref(SD, -1) AND ValueWhen(C,O<C), colorBlue, colorWhite);
trendcolor = IIf(MH < 0 OR (MH < 0 AND MH < Ref(MH, -1)) AND RSI(3) <50 AND SD > 20 AND SD < Ref(SD, -1) AND ValueWhen(C,O>C), colorRed, trendup);
Plot( C, "Close", trendcolor, styleCandle | styleThick );
 

no =  1 ;//Optimize("Swing",Param("Swing", 5, 1, 55),1,55,1);//,2,0.25,5,0.25),0.25,5,0.25);
 
res=HHV(H,no);
sup=LLV(L,no);
tsl=IIf(ValueWhen(IIf(C>Ref(res,-1),1,IIf(C<Ref(sup,-1),-1,0))!=0,IIf(C>Ref(res,-1),1,IIf(C<Ref(sup,-1),-1,0)),1)==1,sup,res);
Plot(tsl, _DEFAULT_NAME(), colorBlue, styleStaircase);
//Buy = Cross(C,res) ;
//Sell = Cross(sup,C)  ;
 
Buy=Cross(Close,tsl) ;
Sell=Cross(tsl,Close)  ;

Buy=ExRem(Buy,Sell);
Sell=ExRem(Sell,Buy);

Short = Sell;
Cover = Buy;

Short=ExRem(Short,Cover);
Cover=ExRem(Cover,Short);

Buy = Ref(Buy,-1);
Sell = Ref(Sell,-1);
Short = Ref(Short,1);
Cover = Ref(Cover,-1);

Вроде и стоит Exrem, но сигнал все равно "скачет", что нужно дописать чтобы заявка выставлялась на закрытии сигнальной свечи?


Последний раз редактировалось: BFG (Пн Мар 24, 2014 10:33 pm), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Сб Мар 22, 2014 10:35 pm Ответить с цитатой Вернуться к началу

Жди недлю. Потом непомни. Ща со временем туго. Sad

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



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

СообщениеДобавлено: Вт Мар 25, 2014 9:52 pm Ответить с цитатой Вернуться к началу

Как я понял загвоздка в параметре tsl
Нашел в нете систему без перерисования и по аналогии с ней добавил перед сигналами следующее:

Код:

tsl[0] = 0; 
tsl[BarCount-1] = Null;

Buy = tsl<Close;
Sell = tsl>Close;

.......


Сигнал перестал скакать, НО перестал работать функционал по постановке заявок Sad То есть при запуске АА не пишет позу и на сигналы не реагирует Crying or Very sad

Need help Sad
Посмотреть профиль Отправить личное сообщение
mtrader



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

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

Доброй ночи!
Олег, помогай)
Не хочет робот ставить заяки на открытии следующего бара.
Пробовал ставить и BuyPrice=ShortPrice=Open и вариант как у тебя в роботе, всё равно выставляет заявки с теми интервалами, что и в анализаторе в настройках. Как быть? Я торгую на 15 минутках, хочется чтобы заявки исполнялись на открытии следующего бара, то есть в 10:15:01, 10:30:01 итд.

Код:

Код:
_SECTION_BEGIN("Quik_Robot3");
Filter = 1;

TimeFrame      = 60*15;            
Account   ="000000000000";   
Client_Code   = "00000";   
Quik            = "C:\\Trader\\Info";
Tickers = "SBER";
/////////////Иструменты////////////////

if(Name() == "SBER") {
   SecCode ="SBER";            
   Class = "TQBR";
   Lots = 1;
    Lots2 = 5;
   TickS = 0.01;
   Otstup   = 0.10;
   LimB = 6;
   LimS = 6;
}

/////////////////Прорисовка///////////////////
_N(Title = StrFormat(Name()+" - "+Date()+" Open %g, Hi %g, Lo %g, Close %g (%.1f%%) Vol " +WriteVal( V, 1.0 ) +" {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 )) ));
Plot( C, "Close", ParamColor("Color", colorDarkGrey ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );

//BuyPrice=SellPrice=CoverPrice=ShortPrice=Open;
per = 20;//Optimize( "Periods",10, 10, 200,10 );
per2 =20;//Optimize( "Periods2",10, 5, 100, 5);
kl = 1;//Optimize ("Koef ATR",4,1,10,1);
perATR = 6;//Optimize ("ATR",6,1,20,1);
rateOfSure=0;

////////////Прорисовка/////////////////////
Plot( LLV(C,per) , "Close", colorWhite ,styleLine);
Plot( HHV(C,per) , "Close", colorWhite ,styleLine);
Plot( LLV(C,per2) , "Close",colorOrange ,styleLine);
Plot( HHV(C,per2) , "Close",colorOrange   ,styleLine);

////////////Начальные значения//////////////////////
SetBarsRequired(sbrAll, sbrAll);
ValATR =  kl*ATR(perATR);
SellSignal = CoverSignal = BuySignal = ShortSignal = 0;
BuyPrice = SellPrice = ShortPrice = CoverPrice = Ref(Open,-1);
pos = BuyInSignal = ShortInSignal = dealPrice = 0;


//////////////////Сигналы/////////////////////////
Buy1 = условие....;
Sell1= условие....;
Short1 = условие....;
Cover1 = условие....;

Buy2 = условие....;
Short2 =условие....;

//"Покупка: "+BuySignal+" "+BuyInSignal+" "+SellSignal;
//"Продажа: "+ShortSignal+" "+ShortInSignal+" "+CoverSignal;
"АТR"+ValATR;
/////////////Конец системы///////////////////
Buy1 = Ref(Buy1, -1);
Sell1 = Ref(Sell1, -1);
Short1 = Ref(Short1, -1);
Cover1 = Ref(Cover1, -1);

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

text = iz = sd = order = "";
color = coloriz = colorDefault;
price = 0;
str = Now(0) + "  " + Name();
pos = AS_READ_PARAM("Quik_Robot" , Name(), "pos");
SdID = AS_READ_PARAM("Quik_Robot", Name(), "BarID");
BarID = LastValue(Ref(DayOfWeek()*1000000 + TimeNum(), -1));

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

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)
   {
        testStr =Account +" "+Client_Code+" "+Class+" "+SecCode+" "+bs+" "+ Lot +" "+pr;     
        AS_WRITE_FILE("C://Trader//transactions.log", testStr);
        order = AS_QUIK_SEND_SYNC_NEWORDER(   "123",            // OrderID - Любые цифры
                                                Account,
                                                Client_Code,
                                                "L",                  // Тип заявки M-рыночная, L-лимитированная
                                                Class,
                                                SecCode,
                                                bs,
                                                pr,
                                                Lot);
   }
   
   if (pos != 0) {
      dealPrice = pr;
   }
   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);   
          AS_WRITE_PARAM("Quik_Robot",Name(),"entPr",pr);
      
      }         
      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);   
          AS_WRITE_PARAM("Quik_Robot",Name(),"entPr",pr);
      
      }         
      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;
   }
}


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

if (TimeFrame == Interval() AND Permit_Ticker)
{
   if(Buy1[BarCount-1] AND pos == 0) {
      str = str + "  Buy";
      sd = "Buy";
      orders("B", C[BarCount-1] + Otstup, Lots);
      AS_WRITE_FILE("C://Trader//transactions.log", str);
   }
   else if(Sell1[BarCount-1] AND pos > 0) {
      str = str + "  Sell";
      sd = "Sell";
      orders("S", C[BarCount-1] - Otstup, abs(pos));
      AS_WRITE_FILE("C://Trader//transactions.log", str);
   }
   else if(Short1[BarCount-1] AND pos == 0) {
      str = str + "  Short";
      sd = "Short";
      orders("S", C[BarCount-1] - Otstup, Lots);
      AS_WRITE_FILE("C://Trader//transactions.log", str);
   }
   else if(Cover1[BarCount-1] AND pos < 0) {
      str = str + "  Cover";
      sd = "Cover";
      orders("B", C[BarCount-1] + Otstup, abs(pos));
      AS_WRITE_FILE("C://Trader//transactions.log", str);
   }
   else if(Buy2[BarCount-1] AND pos > 0 AND pos < LimB AND BarID != SdID) {
      str = str + "  Buy (доливка)";
      sd = "BuyIn";
      orders("B", C[BarCount-1] + Otstup,LimB-pos);
      AS_WRITE_FILE("C://Trader//transactions.log", str);
   }
   else if(Short2[BarCount-1] AND pos < 0 AND abs(pos) < LimS AND BarID != SdID) {
      str = str + "  Short (доливка)";
      sd = "ShortIn";
      orders("S", C[BarCount-1] - Otstup, LimS - abs(pos));
      AS_WRITE_FILE("C://Trader//transactions.log", 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, 120);
AddTextColumn(iz, "Исполнение заявки", 1.2, colorDefault, coloriz, 120 );
AddTextColumn(order, "Заявка", 1.2, colorDefault, IIf(StrToNum(order) > 100, colorGreen, colorRed), 90);
AddColumn(          AS_READ_PARAM("Quik_Robot",Name(),"entPr"),"Entry price",1.2,colorDefault,colorDefault,60);
AddColumn(Short2, "short",1.0,colorDefault,colorDefault,60);
AddColumn(Buy2,"buy",1.0,colorDefault,colorDefault,40);
_SECTION_END();
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen