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


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

СообщениеДобавлено: Пн Июл 18, 2016 11:50 pm Ответить с цитатой Вернуться к началу

Убери ExRem()-ы которые 2 последних. Так тебе будет удобнее смотреть связь между 75 и 5 минут.
Поизучай и давай конкретные вопросы.
Не думай, что я типа в теме. Я посмотрел, написал и забыл... Мне надо короткие и конкретные вопросы задавать.

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



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

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

Значит имеем систему, которая работает на 75 мин.
Код:

  SBuy= C>Ref(HHV(High,6),-1); ///сигнал Buy
 SSell= C<Ref(LLV(Low,7),-1);///сигнал Sell

Задача, избавится от ложных сигналов, которые при формирование свечи появляются и исчезают.
Для этого было принято решение входить на 5 минутках на второй свече, после получения сигнала с 75 минутной свечи.

Код:

TimeFrameSet( 15*in5Minute );/// таймфрейм 75 мин
 
 SBuy= C>Ref(HHV(High,6),-1); ///сигнал Buy
 SSell= C<Ref(LLV(Low,7),-1);///сигнал Sell
SBuy = ExRem(SBuy, SSell);
 SSell = ExRem(SSell, SBuy);
 
TimeFrameRestore(); //
SBuy = TimeFrameExpand(SBuy, 15*in5Minute);
SSell = TimeFrameExpand(SSell, 15*in5Minute);
////////////Получили сигнал с 75 мин.

Дальше я не могу сообразить как входить на второй 5 минутной свече.

Код:
Buy=SBuy;
  Sell=SSell;
   Short =  Sell;
  Cover =  Buy;
//////////////////Вход на пятиминутке

Вот что получаем
Image
Помогите с кодом.
код целиком

Код:
TimeFrameSet( 15*in5Minute );/// таймфрейм 75 мин
 
 SBuy= C>Ref(HHV(High,6),-1); ///сигнал Buy
 SSell= C<Ref(LLV(Low,7),-1);///сигнал Sell
SBuy = ExRem(SBuy, SSell);
 SSell = ExRem(SSell, SBuy);
 
TimeFrameRestore(); //
SBuy = TimeFrameExpand(SBuy, 15*in5Minute);
SSell = TimeFrameExpand(SSell, 15*in5Minute);
 Buy=SBuy;
  Sell=SSell;
   Short =  Sell;
  Cover =  Buy;
 PlotShapes( shapeUpTriangle*Buy, colorGreen, 0, L, -10 );
 PlotShapes( shapeDownTriangle*Sell, colorRed, 0, H, -10 );
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Июл 19, 2016 10:12 am Ответить с цитатой Вернуться к началу

Ну элементарно же.
3 бара
1- нет сигнала
2- есть сигнал
3-есть сигнал
-> входим.

Код:
Buy = SBuy==1 AND Ref(SBuy, -1)==1 AND Ref(SBuy, -2)==0;

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



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

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

Я в программировании ноль, вторую неделю тока разбираюсь.
Значит получается так
Код:


TimeFrameSet( 15*in5Minute );/// таймфрейм 75 мин
 
 SBuy= C>Ref(HHV(High,6),-1); ///сигнал Buy
 SSell= C<Ref(LLV(Low,7),-1);///сигнал Sell
SBuy = ExRem(SBuy, SSell);
 SSell = ExRem(SSell, SBuy);
 
TimeFrameRestore(); //
 SBuy = TimeFrameExpand(SBuy, 15*in5Minute);
 SSell = TimeFrameExpand(SSell, 15*in5Minute);
 Buy = SBuy==1 AND Ref(SBuy, -1)==1 AND Ref(SBuy, -2)==0;
  Sell = SSell==1 AND Ref(SSell, -1)==1 AND Ref(SSell, -2)==0;
   Short =  Sell;
  Cover =  Buy;
 PlotShapes( shapeUpTriangle*Buy, colorGreen, 0, L, -10 );
 PlotShapes( shapeDownTriangle*Sell, colorRed, 0, H, -10 );


В Блектестере выводит сделки, а стрелочки на графике пропали, как их отобразить что бы визуально определить правильно ли происходит сделка?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Не знаю почему у тебя стрелочек нет...

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



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

СообщениеДобавлено: Вт Июл 19, 2016 1:27 pm Ответить с цитатой Вернуться к началу

Помогите еще с одним, отображением.
Если сделать так
Код:

TimeFrameSet( 15*in5Minute );/// таймфрейм 75 мин
 
 SBuy= C>Ref(HHV(High,6),-1); ///сигнал Buy
 SSell= C<Ref(LLV(Low,7),-1);///сигнал Sell
SBuy = ExRem(SBuy, SSell);
 SSell = ExRem(SSell, SBuy);

 
TimeFrameRestore(); //
SBuy = TimeFrameExpand(SBuy, 15*in5Minute);
SSell = TimeFrameExpand(SSell, 15*in5Minute);
 PlotShapes( shapeUpTriangle*SBuy, colorBlue, 0, L, -20 );
 PlotShapes( shapeDownTriangle*SSell, colorOrange, 0, H, -20 );
 
 Buy = SBuy==1 AND Ref(SBuy, -1)==1 AND Ref(SBuy, -2)==0;
  Sell = SSell==1 AND Ref(SSell, -1)==1 AND Ref(SSell, -2)==0;
   Short =  Sell;
  Cover =  Buy;
Plot(C, " ", colorBlack, styleCandle);
 PlotShapes( shapeUpTriangle*Buy, colorGreen, 0, L, -10 );
 PlotShapes( shapeDownTriangle*Sell, colorRed, 0, H, -10 );

то при установки таймфрейма 15 мин получатся вот так
Image
5 стрелок на всю длинну 75 минутного бара, а надо бы только 1-ю
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Июл 19, 2016 1:33 pm Ответить с цитатой Вернуться к началу

После TimeFrameExpand() вставь обратно ExRem()

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



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

СообщениеДобавлено: Вт Июл 19, 2016 1:45 pm Ответить с цитатой Вернуться к началу

Тогда 15 мин не отображаются вообще
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Июл 19, 2016 2:36 pm Ответить с цитатой Вернуться к началу

Код:
TimeFrameSet( 15*in5Minute );/// таймфрейм 75 мин
   SBuy= C>Ref(HHV(High,6),-1); ///сигнал Buy
   SSell= C<Ref(LLV(Low,7),-1);///сигнал Sell
   SBuy = ExRem(SBuy, SSell);
   SSell = ExRem(SSell, SBuy);
TimeFrameRestore(); //

Buy = TimeFrameExpand(SBuy, 15*in5Minute);
Sell = TimeFrameExpand(SSell, 15*in5Minute);

if(Interval() == 5*60)
{
   Buy = Buy==1 AND Ref(Buy, -1)==1 AND Ref(Buy, -2)==0;
   Sell = Sell==1 AND Ref(Sell, -1)==1 AND Ref(Sell, -2)==0;
}
Short =  Sell;
Cover =  Buy;
Plot(C, "", colorBlack, styleCandle);
PlotShapes( shapeUpTriangle*Buy, colorGreen, 0, L, -10 );
PlotShapes( shapeDownTriangle*Sell, colorRed, 0, H, -10 );
Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g", O, H, L, C);

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



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

СообщениеДобавлено: Вт Июл 19, 2016 3:55 pm Ответить с цитатой Вернуться к началу

Да так отображается сигнал и на 15 мин и 75 мин.
А как сделать что бы сигнал SBus/SSell c 75 мин отображался на 15 мин свече?
Image
Ошибка на картинке место Buy читай Sell
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Так он там и отображается. Никаких других сигналов в коде нет.

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



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

СообщениеДобавлено: Ср Июл 20, 2016 9:55 am Ответить с цитатой Вернуться к началу

Мы отобразили сигнал Buy, он отображается и 15 и 75 мин. Ок.
Но Мы не видим сигнала SSel/SBuy На 15 мин, точнее Видим 5 сигналов на каждой 15 мин свечке.

Код:

TimeFrameSet( 15*in5Minute );
Buyperiods=Optimize("Buyperiods",28, 1, 30,1);
Sellperiods=Optimize("Sellperiods", 5, 1, 30,1);

   SBuy= C>Ref(HHV(High,Buyperiods),-1);
   SSell= C<Ref(LLV(Low,Sellperiods),-1);
   SBuy = ExRem(SBuy, SSell);
   SSell = ExRem(SSell, SBuy);
TimeFrameRestore(); //

Buy = TimeFrameExpand(SBuy, 15*in5Minute);
Sell = TimeFrameExpand(SSell, 15*in5Minute); SBuy = ExRem(SBuy, SSell);
   SSell = ExRem(SSell, SBuy);
PlotShapes( shapeUpTriangle*SBuy, colorBlue, 0, L, -20 );
PlotShapes( shapeDownTriangle*SSell, colorOrange, 0, H, -20 );

if(Interval() == 5*60)
{
   Buy = Buy==1 AND Ref(Buy, -1)==1 AND Ref(Buy, -2)==0;
   Sell = Sell==1 AND Ref(Sell, -1)==1 AND Ref(Sell, -2)==0;
}
Short =  Sell;
Cover =  Buy;
PlotShapes( shapeUpTriangle*Buy, colorGreen, 0, L, -10 );
PlotShapes( shapeDownTriangle*Sell, colorRed, 0, H, -10 );
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Ср Июл 20, 2016 10:05 am Ответить с цитатой Вернуться к началу

Ну, правильно. Сигнал на 75 минутной свечке длится 75 минут. Это 5 15 минутных свечек. Вот поэтому Ами и показывает на 15 мин 5 свечек с сигналом.

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



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

СообщениеДобавлено: Ср Июл 20, 2016 10:10 am Ответить с цитатой Вернуться к началу

Так хотелось бы один с 75мин и один с 15мин. на 15 мин тайфрейме.
и еще вот в этой части
Код:
 
if(Interval() == 5*60)
{
   Buy = Buy==1 AND Ref(Buy, -1)==1 AND Ref(Buy, -2)==0;
   Sell = Sell==1 AND Ref(Sell, -1)==1 AND Ref(Sell, -2)==0;
}

нет ни слова про SSell/Sbuy, не надали дописать передними
Код:

Buy=Sbuy;
Sell=SSell;
Посмотреть профиль Отправить личное сообщение
IzBu



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

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

Вот что получилось
Код:

TimeFrameSet( 15*in5Minute );
Buyperiods=Optimize("Buyperiods",28, 1, 30,1);
Sellperiods=Optimize("Sellperiods", 5, 1, 30,1);

   SBuy= C>Ref(HHV(High,Buyperiods),-1);
   SSell= C<Ref(LLV(Low,Sellperiods),-1);
   SBuy = ExRem(SBuy, SSell);
   SSell = ExRem(SSell, SBuy);
TimeFrameRestore(); //
SBuy = TimeFrameExpand(SBuy, 15*in5Minute);
SSell = TimeFrameExpand(SSell, 15*in5Minute);
Buy=Sbuy;
Sell=SSell;

if(Interval() == 15*60)
{
   Buy = Buy==1 AND Ref(Buy, -1)==1 AND Ref(Buy, -2)==0;
   Sell = Sell==1 AND Ref(Sell, -1)==1 AND Ref(Sell, -2)==0;
}
Short =  Sell;
Cover =  Buy;
Plot(C, "", colorBlack, styleCandle);
PlotShapes( shapeUpTriangle*SBuy, colorBlue, 0, L, -20 );
PlotShapes( shapeDownTriangle*SSell, colorOrange, 0, H, -20 );

PlotShapes( shapeUpTriangle*Buy, colorGreen, 0, L, -10 );
PlotShapes( shapeDownTriangle*Sell, colorRed, 0, H, -10 );

Image
Ну в принципе понятно где какой сигнал.
Самое главное достигнут результат сигнал с большего таймфрейма вход на меньшем на след. свече.
Олег большое спасибо, что помогаете.
И последнее проверьте пожалуйста код будет работать с вашим роботом со стопами
Код:

Filter = 1;
SetBarsRequired(sbrAll, sbrAll);

TimeFrame      = 60*75;               // таймфрейм в секундах.
Account         = "NL0011100043";         // Номер счета
Client_Code      = "38000";               // Код Клиента
Quik         = "C:\\QUIK";            // путь к Квику

Tickers = "Br8,SBER";             // торгуемые символы через запятую без пробелов. Для контроля

ошибок. Так, как они называются в Ами
/////////////

if(Name() == "Br8") {            //Символ как он называется в Ами
   SecCode         = "BRQ8";           
   Class         = "SPBFUT";
   Lots            = 4;
   TickS         = 0.01;               // Минимальный шаг цены торгуемой бумаги
   Stop            = 1;                  // стоп в %
   profit         = 2;                  // профит в %
   Otstup         = 0.05;               // Заявка будет выставлена хуже текущей цены на Otstup рублей
}
else if(Name() == "SBER") {      //Символ как он называется в Ами
           SecCode         = "SBER03";         
   Class         = "EQBR";
   Lots            = 0;
   TickS         = 0.01;               // Минимальный шаг цены торгуемой бумаги
   Stop            = 2;                  // стоп в %
   profit         = 4;                  // профит в %
   Otstup         = 1;                  // Заявка будет выставлена хуже текущей цены на Otstup рублей
}

////////////////////////////////////

text = iz = sd = order = "";
color = coloriz = colorDefault;
price = 0;
str = Now(0) + "  " + Name();
pos = AS_READ_PARAM("Quik_Robot", Name(), "pos");

//////////////Система///////////////
TimeFrameSet( 15*in5Minute );
Buyperiods=Optimize("Buyperiods",28, 1, 30,1);
Sellperiods=Optimize("Sellperiods", 5, 1, 30,1);

   SBuy= C>Ref(HHV(High,Buyperiods),-1);
   SSell= C<Ref(LLV(Low,Sellperiods),-1);
   SBuy = ExRem(SBuy, SSell);
   SSell = ExRem(SSell, SBuy);
TimeFrameRestore(); //
SBuy = TimeFrameExpand(SBuy, 15*in5Minute);
SSell = TimeFrameExpand(SSell, 15*in5Minute);
Buy1=Sbuy;
Sell1=SSell;

if(Interval() == 15*60)
{
   Buy1 = Buy1==1 AND Ref(Buy1, -1)==1 AND Ref(Buy1, -2)==0;
   Sell1 = Sell1==1 AND Ref(Sell1, -1)==1 AND Ref(Sell1, -2)==0;
}
Short1 =  Sell1;
Cover1 =  Buy1;

///////////Конец Системы////////////

Buy1 = Buy1[BarCount - 1];
Sell1 = Sell1[BarCount - 1];
Short1 = Short1[BarCount - 1];
Cover1 = Cover1[BarCount - 1];

/// стопы ///
if(pos > 0 AND C[BarCount-1] < AS_READ_PARAM("Quik_Robot", Name(), "price")*(1 - Stop/100))
{
   Sell1 = 1;
   str = str + "  сработал стоп при лонге";
}
else if(pos < 0 AND C[BarCount-1] > AS_READ_PARAM("Quik_Robot", Name(), "price")*(1 + Stop/100))
{
   Cover1 = 1;
   str = str + "  сработал стоп при шорте";
}
/// профит ///
if(pos > 0 AND C[BarCount-1] > AS_READ_PARAM("Quik_Robot", Name(), "price")*(1 + profit/100))
{
   Sell1 = 1;
   str = str + "  сработал стоп при лонге";
}
else if(pos < 0 AND C[BarCount-1] > AS_READ_PARAM("Quik_Robot", Name(), "price")*(1 - profit/100))
{
   Cover1 = 1;
   str = str + "  сработал стоп при шорте";
}

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

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)
   {
      order = AS_QUIK_SEND_SYNC_NEWORDER(   "123",            // OrderID - Любые цифры
                                                Account,
                                                Client_Code,
                                                "L",                  // Тип заявки M-рыночная, L-лимитированная
                                                Class,
                                                SecCode,
                                                bs,
                                                pr,
                                                Lot);
   }

   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(), "price", 0);
      }
      else if(pos == 0 AND bs == "S")         // шорт
      {
         AS_WRITE_PARAM("Quik_Robot", Name(), "pos", -1*Lot);
         AS_WRITE_PARAM("Quik_Robot", Name(), "price", Close[BarCount - 1]);
      }
      else if(pos < 0 AND bs == "B")          // закрытие шорта
      {
         AS_WRITE_PARAM("Quik_Robot", Name(), "pos", 0);
         AS_WRITE_PARAM("Quik_Robot", Name(), "price", 0);
      }
      else if(pos == 0 AND bs == "B")       // лонг
      {
         AS_WRITE_PARAM("Quik_Robot", Name(), "pos", Lot);
         AS_WRITE_PARAM("Quik_Robot", Name(), "price", Close[BarCount - 1]);
      }
      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", round(C[BarCount-1]) + Otstup, Lots);
      AS_WRITE_FILE("log.quik", str);
   }
   if(Sell1[BarCount-1] AND pos > 0) {
      str = str + "  Sell";
      sd = "Sell";
      orders("S", round(C[BarCount-1]) - Otstup, abs(pos));
      AS_WRITE_FILE("log.quik", str);
   }
   if(Short1[BarCount-1] AND pos == 0) {
      str = str + "  Short";
      sd = "Short";
      orders("S", round(C[BarCount-1]) - Otstup, Lots);
      AS_WRITE_FILE("log.quik", str);
   }
   if(Cover1[BarCount-1] AND pos < 0) {
      str = str + "  Cover";
      sd = "Cover";
      orders("B", round(C[BarCount-1]) + Otstup, abs(pos));
      AS_WRITE_FILE("log.quik", 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, 170);
AddTextColumn(iz, "Исполнение заявки", 1.2, colorDefault, coloriz, 120 );
AddTextColumn(order, "Заявка", 1.2, colorDefault, IIf(StrToNum(order) > 100, colorGreen, colorRed), 90);
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen