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



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

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

Робот под КВИК для любителей рисования, на базе кода Механизатора (окно с АМИ должно быть обязательно открыто иначе сигналы в tri не пишутся), т.к. вроде код с рисованными линиями в АА не запихивается.

Создаем индикатор и запихиваем в него код :

Код:
//// TradeBot v.1.1. Последние изменения 29.09.2009 /////

///////// Установки аккаунта =======================================================================================================================
TickerID=1;                // уникальный для каждого индикатора номер
Ticker="SBER";             // название бумаги в Амиброкере. На другой бумаге работать не будет
TimeFrame=5;               // таймфрейм в минутах. На других таймфреймах работать не будет
Classcode="EQBR";          // код класса бумаги
Seccode="SBER03";          // код бумаги
Account="L00-00000000";    // ваш аккаунт на бирже
Client="00000";            // код клиента
Lots=Param("количество лотов",1,0,1000,1); // сколько лотов желаете торговать
FileName="F:/Program Files/trans.tri"; // слэши прямые!!! имя файла с транзакциями для квика  F:\Program Files\trans.tri
Otstup=0.4;                // в процентах. заявка будет выставлена хуже текущей цены на столько процентов
Point=2;                   // количество знаков после запятой в цене
Lot = Prec(12500/Close,0); // здесь можно указать свой капиталл, чтобы высчитывалось количество доступных лотов (сейчас это -> 12500)
//Покупка-продажа вручную ==========================================================================================================================
triggerBay = ParamTrigger("купить", "Нажмите кнопку, чтобы купить");
if( triggerBay ) { PopupWindow( "КУПЛЕНО", "Ami сказал", timeout = 1, left = -1, top = -1 ); }
triggerSel = ParamTrigger("продать", "Нажмите кнопку, чтобы продать");
if( triggerSel ) { PopupWindow( "ПРОДАНО", "Ami сказал", timeout = 1, left = -1, top = -1 ); }

//сигналы на пересечении линии =====================================================================================================================
up = Study("UP", GetChartID());
dn = Study("DN", GetChartID());
st = Study("ST", GetChartID());

////////// Правила системы ==========================================================================================================================
Buy   = L < dn AND H > dn AND st<dn ;

Sell  = H > up OR L < st ;

Short = H > up AND L < up AND st>up ;

Cover = L < dn OR H > st ;
//определяем передавать сигнал или нет ==============================================================================================================
if (ParamToggle("выводить сигналы в tri ?", "No|Yes" ))      //выбираем выводить сигналы в tri или нет
triggerBot = 1;
else
triggerBot = 0;

////// Убираем лишние сигналы =======================================================================================================================
Buy=ExRem(Buy ,Sell) OR triggerBay;
Sell=ExRem(Sell,Buy);
Short=ExRem(Short ,Cover) OR triggerSel;
Cover=ExRem(Cover,Short);


// Титры. ===========================================================================================================================================
Title = "Бот по рисованным линиям \n\n"+   
"Возможно   лотов :   "+Lot+"\n"+
"Фактически лотов :   "+Lots+"\n"+
"Up:  "+Up+"\n"+
"Dn:  "+Dn+"\n"+
"St:  "+St+"\n\n"+
"High:   "+H+"\n"+
"Low:    "+L+"\n"+
"Open:  "+O+"\n"+
"Close: "+C;

///////////// Рисуем всякое ========================================================================================================================
Plot(C,"price",1,128);
PlotShapes((H > up) *shapeHollowSmallCircle , colorBlue,0,H,17);            // рисуем точки на пробоях
PlotShapes((L < dn)*shapeHollowSmallCircle , colorRed, 0, L,-17);           // рисуем точки на пробоях
PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorGreen,0,L,-10);         
PlotShapes(IIf(Sell,shapeDownArrow,shapeNone),colorRed,0,H,-25);       
PlotShapes(IIf(Short, shapeHollowDownArrow,shapeNone),colorRed,0,H,-10);
PlotShapes(IIf(Cover,shapeHollowUpArrow,shapeNone),colorGreen,0,L,-25);

if (triggerBot == 0)//выбираем выводить сигналы в tri или нет=======================================================================================
{
Buy = Sell = Short = Cover = 0;
FazaText = "PAUSE !!!";
}
else
FazaText = "---->--->";

//подписываем состояние на последнем баре, переданное в tri ==========================================================================================
EndNum = BarCount-1;
if (Buy[EndNum]==1)
     FazaText = "Buy";//
if (Sell[EndNum]==1)
     FazaText = "Sell";//
if (Short[EndNum]==1)
     FazaText = "Short";//
if (Cover[EndNum]==1)
     FazaText = "Cover";//
if (Buy[EndNum] + Sell[EndNum]+ Short[EndNum] + Cover[EndNum] > 1)
     FazaText = "???";//
GfxSetOverlayMode(1);
GfxSelectFont("Tahoma", Status("pxheight")/20);
GfxSetTextAlign( 0 | 24 );// по вертикали
GfxSetTextColor( ColorRGB( 230, 230, 230 ) );
GfxSetBkMode(1); // TRANSPARENT = 1   OPAQUE = 2
GfxTextOut( FazaText, Status("pxwidth")/1.3, Status("pxheight")/14 );  // GfxTextOut( ''text'', x, y )

//////////// Формируем транзакцию.//////////////=====================================================================================================
////////////////////////////////////////////////=====================================================================================================
//////// !!!!СЮДА РУКАМИ НЕ ЛАЗИТЬ!!!! /////////=====================================================================================================
////////////////////////////////////////////////=====================================================================================================

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


Кидаем код на график и в окне с графиком цены надо вручную нарисовать линиии от которых робот будет торговать:
стоп-линию (в свойствах указать ST)
верхнюю (в свойствах указать UP)
нижнюю (в свойствах укзать DN как на примере)
Также в свойствах можно указать "расширение вправо", чтобы линия автоматически продлялась за правую границу, т.к. если линия не будет отрисована в какой то момент, сигналы задаваемые ей перестанут генерироваться (кому интересно поэксперементируйте). Также конструкции не всегда нравится, когда линии начинаются на предыдущем дне а заканчиваются на сегодняшнем(начинают неправильно рисоваться стрелки), поэтому линии приходится перетаскивать на текущий день, впрочем коридор все равно надо переодически настраивать.
В результате должно получиться примерно так (в открытом окошке настройки для линии DN):

Image

Порядок работы:
перетаскиваем линии на текущий день Up -сверху, DN - ниже, ST- если хотим торговать вверх под обоими линиями, если вниз- над ними. Робот торгует только в одну сторону, естесственно в напрвлении глобальной тенденции, как ее определить придумайте сами, , естесственно если цена пойдет против вас ,при достижении ST-линии позиция будет закрыта.

когда все красиво, жмем правой кнопкой на графике и в открывшемся окне "параметры" настраиваем необходимое количество торгуемых лотов и нажимаем кнопку "выводить сигнал в tri" после этого все вновь сформировавшиеся сигналы начнут записываться в tri. При этом в правом верхнем углу отображается текущее состояние системы на последнем баре. Также чтобы убедиться, что все работает можно нажат кнопки купить/продать, чтобы убедиться, что все работатет и сигналы пишутся. Если кнопка "выводить сигнал в tri" не нажата НИКАКИЕ сигналы не пишутся в том числе и "ручные", это сделано для того, чтобы в течении дня можно было безболезнеенно отключать вывод сигналов и подстраивать линии.

_________________
Romoti.

Последний раз редактировалось: Romoti (Ср Сен 30, 2009 7:52 pm), всего редактировалось 7 раз(а)
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Это подлый форум все таки коверкает код. Лучше присоедини его к сообщению файлом.

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



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

СообщениеДобавлено: Ср Сен 30, 2009 8:00 pm Ответить с цитатой Вернуться к началу

Подправил в первоначальном тексте, теперь все работает Laughing

_________________
Romoti.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Что
Код:
Study("UP", GetChartID());

в АА не работает?
Хм. Надо будет посмотреть...

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen