| Собираем торговый автомат из Амиброкера и Квика. |
Собираем торговый автомат из Амиброкера и Квика.Обсуждение автомата и техническая поддержка ведется на форуме в этом топике. Предполагаем что уже имеется работающий экспорт данных в реальном времени в Метасток или Омегу. О том как это сделать читайте в руководстве по Квику. Имейте в виду что коды бумаг должны быть указаны латинскими буквами поскольку у Амиброкера с русскими проблема. Устанавливаем Амиброкер и создаем базу данных с экспортом данных из имеющейся базы данных Метастока или Омеги. Для случая метастока: тыкаем в New Database, прописываем там новую директорию, создаем базу данных нажав Create, далее указываем в Data Source "Metastock data Plug-in", ставим Disable в Local Data Storage, указываем Time Interval 1 minute либо ticks, тыкаем в Configure, там Add Folder, прописываем ту директорию где лежат риалтайм метастоковские файлы (эта директория прописана в настройках метастоковского файлсервера), включаем Intraday Data Refresh и жмем Retrieve Simbols. Все, база данных создана, в папке All должны появиться все символы импротируемые метастоком. Теперь создаем где-нибудь папочку куда будет складываться файл для передачи транзакций в квик. Адрес этого файла нужно будет прописать в FileName индикатора. Затем в Амиброкере нажимаем Indicator Builder, создаем новый индикатор нажав Add, называем его как-нибудь по-человечески нажав Rename. Далее кладем в окно редактора следующий текст: ///// TradeBot v.1.1. Последние изменения 6.12.2004 ///// ///////// Установки аккаунта /////////// TickerID=1; // уникальный для каждого индикатора номер Ticker="EESR"; // название бумаги в Амиброкере. На другой бумаге работать не будет TimeFrame=30; // таймфрейм в минутах. На других таймфреймах работать не будет Classcode="EQBR"; // код класса бумаги Seccode="EESR"; // код бумаги Account="L01-00000000"; // ваш аккаунт на бирже Client=""; // код клиента Lots=1; // сколько лотов желаете торговать FileName="e:/trading/amibroker/trans.tri"; // слэши прямые!!! имя файла с транзакциями для квика Otstup=1.5; // в процентах. заявка будет выставлена хуже текущей цены на столько процентов Point=3; // количество знаков после запятой в цене ////////// Правила системы /////////////// bars=20; HLine=Ref(HHV(H,bars),-1); LLine=Ref(LLV(L,bars),-1); Buy=H>Hline; Sell=L<LLine; Short=Sell; Cover=Buy; ////// Убираем лишние сигналы ///////////// Buy=ExRem(Buy,Sell); Sell=ExRem(Sell,Buy); Short=ExRem(Short,Cover); Cover=ExRem(Cover,Short); ///////////// Рисуем всякое /////////////// Plot(C,"price",1,128); PlotShapes(IIf(Buy,shapeUpArrow,0),5,0,Graph0,-15); PlotShapes(IIf(Sell,shapeDownArrow,0),4,0,Graph0,-15); PlotShapes(IIf(Cover,shapeHollowUpArrow,0),5,0,Graph0,-15); PlotShapes(IIf(Short,shapeHollowDownArrow,0),4,0,Graph0,-15); //////////// Формируем транзакцию.////////////// //////////////////////////////////////////////// //////// !!!!СЮДА РУКАМИ НЕ ЛАЗИТЬ!!!! ///////// //////////////////////////////////////////////// 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 (found==0) { f=fopen(FileName,"a"); if (f) { fputs(sstr+"\n",f); fclose(f); } } } function makeandsave(sOper,sOperID,sprice) { CCS=""; if (Client!="") { CCS=" CLIENT_CODE="+Client+";"; } transid=StrFormat("TRANS_ID=%g%g%g%g;",TickerID,sOperID,LastValue(Ref(DayOfYear(),-1)),LastValue(Ref(TimeNum(),-1))); str=StrFormat(transid+"PRICE=%1."+Point+"f;QUANTITY=%g;OPERATION="+sOper+";CLASSCODE="+Classcode+"; ACTION=NEW_ORDER; TYPE=L; SECCODE="+Seccode+"; ACCOUNT="+Account+";"+CCS,sprice,Lots); savetrifile(transid,str); } if ((Now(3)==LastValue(DateNum()))AND(BarCount>1)AND(Name()==Ticker)AND(TimeFrame==Interval()/60)AND((Buy[BarCount-1]==1)OR(Sell[BarCount-1]==1)OR(Short[BarCount-1]==1)OR(Cover[BarCount-1]==1))) { ifbuy=IIf(Buy[BarCount-1]==1,1,0); ifsell=IIf(Sell[BarCount-1]==1,1,0); ifshort=IIf(Short[BarCount-1]==1,1,0); ifcover=IIf(Cover[BarCount-1]==1,1,0); if (ifbuy) { price=(1+Otstup/100)*Close[BarCount-1]; makeandsave("B",1,price); } if (ifsell) { price=(1-Otstup/100)*Close[BarCount-1]; makeandsave("S",2,price); } if (ifshort) { price=(1-Otstup/100)*Close[BarCount-1]; makeandsave("S",3,price); } if (ifcover) { price=(1+Otstup/100)*Close[BarCount-1]; makeandsave("B",4,price); } } //// mehanizator (c) 2004, http://www.russian-trader.ruВ установках системы нужно поставить следующие параметры:
В правилах системы пишем систему которую собираемся торговать. Сейчас там стоят правила тренд-следящей реверсивной системы на пробое ценового канала. Если будете писать свое, на выходе правил должны быть сигналы Buy, Sell, Short, Cover. Если в шорт играть не собираетесь, поставьте Short=0;Cover=0; Все, нажав Apply вы прицепите к графику окошко в котором будут рисоваться графики и стрелочки системы. В момент появления сигнала в файл будет записываться команда транзакции. Теперь идем в Квик, открываем Дилер/Загружать транзакции динамически из файла и в строке "Файл с исходными данными о транзакциях" прописываем адрес этого файла. Можно начинать импорт транзакций. Если вы собираетесь торговать одновременно несколько систем, нужно для каждой из них создать отдельный индикатор с разными TickerID. Затем создаете в Амиброкере столько окон сколько у вас бумаг, в каждое окно загружаете соответствующий график. Потом в каждое окно добавляете соответствующий индикатор. Если есть несколько систем на одну бумагу, можно к одному графику цеплять несколько индикаторов, а можно создавать отдельное окно с одним и тем же графиком для каждого индикатора - как вам удобнее. Не забудьте что в момент запуска система не знает о том в позиции вы или нет. Если начать работу между сигналами покупки и продажи следующим сигналом будет продажа вашей несуществующей позиции, в результате вы получите внезапный шорт. Файл с транзакциями лучше регулярно чистить перед торгами, чтоб лишних тормозов Амиброкеру не навешивать. Вообще последовательность работы рекомендую такую: перед началом торгов настраиваем системы при необходимости чтобы ничего не трогать во время торгов, чистим файл с транзакциями и запускаем импорт транзакций в квике. После этого лучше ничего не менять и не трогать. Запомните первую заповедь программиста: РАБОТАЕТ - НЕ ТРОГАЙ!!! :) И напоследок самое главное. Автор не несет ответственности за результаты использования этого индикатора. Используйте его на свой страх и риск. Удачных трейдов :) Добавление: отслежена проблема с пропадающими сигналами. |




