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


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

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

Red писал(а):
Интересно, а почему вот такая формула не работает.

Y = Param("Y",0.0005,0,1,0.0005);
Cond11 = H >= Ref(H,-1)*(1+Y);

PlotShapes(Cond11*shapeUpArrow,colorRed);

Изменил, результат тот же.
RH = Ref(H,-1);

Cond11 = H >= RH*(1+Y);

Непонял. Что не работает?

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



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

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

У меня он два значения не сравнивает.

Соответственно H и Ref(H,-1) умноженное на 1+Y.

Если я забью формулу

Cond = H >= (Ref(H,-1)+100);

ТО Амик их героичес ки сравнит и покажетгде соблюдается, но стоит заменить 100 на Y (при Y = Param("Y",60,0,210,30)) и все сравнение пропадает.

Хотя я могу и из-за невнимательности накосячить.


За пред. ответ спасибо. Опять-же невнимательность, там одно из S это Slip - проскальзывание, для бэк-теста.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Red писал(а):
У меня он два значения не сравнивает.

Соответственно H и Ref(H,-1) умноженное на 1+Y.

Если я забью формулу

Cond = H >= (Ref(H,-1)+100);

ТО Амик их героичес ки сравнит и покажетгде соблюдается, но стоит заменить 100 на Y (при Y = Param("Y",60,0,210,30)) и все сравнение пропадает.

Хотя я могу и из-за невнимательности накосячить.


За пред. ответ спасибо. Опять-же невнимательность, там одно из S это Slip - проскальзывание, для бэк-теста.

У меня вот так работает
Код:

Y = Param("Y",0.0005,0, 0.01, 0.000005);
Cond11 = H >= Ref(H,-1)*(1+Y);

Plot(C, "", colorBlack, styleCandle);
Plot(Cond11, "", colorRed, styleHistogram|styleOwnScale);


По циклу. Посмотри. Если дальше разберешься - хорошо. Нет - пиши.

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



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

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

Олег, позволь тогда еще вопрос.

Если я в условие цикла вставлю

if(BarsSince(Buy)[i] >0) то Амик ругается - Дураком обзывает.

Указывает на Error 30.

Я так понимаю что данная функция невозможна в условии.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Red писал(а):
Олег, позволь тогда еще вопрос.

Если я в условие цикла вставлю

if(BarsSince(Buy)[i] >0) то Амик ругается - Дураком обзывает.

Указывает на Error 30.

Я так понимаю что данная функция невозможна в условии.

Угу. Так нелзя. Надо типа так
Код:

qqq = BarsSince(Buy);
цикл
if(qqq[i] >0);

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



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

СообщениеДобавлено: Вт Июн 23, 2009 12:13 pm Ответить с цитатой Вернуться к началу

Вот так получилось.
Стоп один хрен не трейлит.
Повытаскивал из цикла все условия.
Код:

TRA = T*ATR(periodsA);
Buy = 0;
Short = 0;
Sell = 0;
Cover = 0;

PriceBuy = 0;
PriceShort = 0;
PriceSell = 0;
PriceCover = 0;

position = 0;
tr = 0;
stop = 0;

SB = BarsSince(Buy);
SS = BarsSince(Short);

StoptrH = (H >= (PriceBuy + Ref(TRA,-1))) OR (Ref(H,-1) >= (PriceBuy + Ref(TRA,-2)));
StoptrL = (L <= (PriceShort - Ref(TRA,-1))) OR (Ref(L,-1) <= (PriceShort - Ref(TRA,-2)));

///////////////////цикл////////////////

for(i = 1; i < BarCount; i++)
{
    if(position==0)   
       {
         if(Cond1[i])
           {
             Buy[i] = 1;
             position = 1;
             BuyPrice[i] = (DUS[i]+X)*(1+S);
             PriceBuy = BuyPrice[i];
             tr = 0;
             stop = L[i-1];
           }
         if(Cond11[i])
           {
             Buy[i] = 1;
             position = 1;
             BuyPrice[i] = O[i]*(1+S);
             PriceBuy = BuyPrice[i];
             tr = 0;
             stop = DLF[i]-Y;
//             stop = L[i-1];
           }
         if(Cond2[i])
           {
             Short[i] = 1;
             position = -1;
             ShortPrice[i] = (DLS[i]-X)*(1-S);
             PriceShort = ShortPrice[i];
             tr = 0;
             stop = H[i-1];
           }
         if(Cond12[i])
           {
             Short[i] = 1 ;
             position = -1;
             ShortPrice[i] = O[i]*(1-S);
             PriceShort = ShortPrice[i];
             tr = 0;
             stop = DUF[i]+Y;
//             stop = H[i-1];
           }
       } 
     if(position == 1)
       {
         if(Cond4[i])
           {
             Sell[i] = 1;
             SellPrice[i] = (DLF[i]-Y)*(1-S);
             position = 0;
           }
         if(tr == 0)
           {
             if(SB[i] > 1)
               {
                 if(StoptrH[i] = 1)
                   {
                    stop = PriceBuy;
                    tr = 1;
                   }
//                 if(H[i-1] >= PriceBuy + TRA[i-1])
//                   {
//                    stop = PriceBuy;
//                    tr = 1;
//                   }
               }
           }
         if(L[i] <= stop)
           {
             Sell[i] = 1;
             SellPrice[i] = stop*(1-S);
             position = 0;
           }         
         if(Cond2[i])
           {
             Sell[i] = 1;
             Short[i] = 1;
             SellPrice[i] = (DLS[i]-X)*(1-S);
             ShortPrice[i] = (DLS[i]-X)*(1-S);
             position = -1;
             PriceShort = ShortPrice[i];
             tr = 0;
             stop = H[i-1];
           }
         if(Cond12[i])
           {
             Sell[i] = 1;
             Short[i] = 1;
             SellPrice[i] =  O[i]*(1-S);
             ShortPrice[i] = O[i]*(1-S);
             position = -1;
             PriceShort = ShortPrice[i];
             tr = 0;
             stop = DUF[i]*(1+Y);
//             stop = H[i-1]; 
           }
       }
     if(position == -1)
       {
         if(Cond3[i])
           { 
             Cover[i] =1;
             CoverPrice[i] = (DUF[i]+Y)*(1+S);
             position = 0;
           }
        if(tr == 0)
           {
             if(SS[i] > 1)
               {
                 if(StoptrL[i] = 1) 
                   {
                     stop = PriceShort;
                     tr = 1;
                   }
//                 if(L[i-1] <= PriceShort - TRA[i-1]) 
//                   {
//                     stop = PriceShort;
//                     tr = 1;
//                   }
               }
           }
         if(H[i] >= stop)
           {
             Cover[i] =1;
             CoverPrice[i] = stop*(1+S);
             position = 0;
           }
         if(Cond1[i])
           {
             Cover[i] = 1;
             Buy[i] = 1;
             CoverPrice[i] = (DUS[i]+X)*(1+S);
             BuyPrice[i] = (DUS[i]+X)*(1+S);
             position = 1;
             PriceBuy = BuyPrice[i];
             tr = 0;
             stop = L[i-1];
           }
         if(Cond11[i])
           {
             Cover[i] = 1;
             Buy[i] = 1;
             CoverPrice[i] = O[i]*(1+S);
             BuyPrice[i] = O[i]*(1+S);
             position = 1;
             PriceBuy = BuyPrice[i];
             tr = 0;
             stop = DLF[i]*-Y;
//             stop = L[i-1];
           }
 
       }
}
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Июн 23, 2009 12:51 pm Ответить с цитатой Вернуться к началу

Цикл пока не смотерл однако есть вопрос. Я уже спрашивал. Можешь объяснить нафига это
SB = BarsSince(Buy);
SS = BarsSince(Short);
В тот момент когда они в коде и Buy и Short = 0
Т.е. они ни чего не считают и их использовать потом нельзя.

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


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

СообщениеДобавлено: Вт Июн 23, 2009 12:54 pm Ответить с цитатой Вернуться к началу

Такая же ошибка дальше
StoptrH = (H >= (PriceBuy + Ref(TRA,-1))) OR (Ref(H,-1) >= (PriceBuy + Ref(TRA,-2)));
StoptrL = (L <= (PriceShort - Ref(TRA,-1))) OR (Ref(L,-1) <= (PriceShort - Ref(TRA,-2)));
В этот момент у тебя PriceBuy и PriceShort = 0

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



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

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

1. Нафига.

При сильном движении свеча входа своим H часто м..б. выше уровня, на котором мы переносим стоп в безубыток, а L будет ниже уровня.

Когда ты объяснял логику Амика, то говорил, что он мыслит массивами. В иитоге получится что L ниже стопа и бэктест купит и продаст на одной свечке.
А мне нужно чтобы на свече входа он стоп на первончальном, а вот на след уже можно переставлять.

2. Написал до цикла потому-что не знал куда затолкать. Smile Я же с Амиком недавно разбираться начал.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Вот посмотри. Я обрезал множественные условия входов упростив цикл, но смысл остался.

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



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

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

Я так понимаю, что нужно будет поставить:

Код:

SetOption         ("AllowSameBarExit",0);             // Вкл (1) выкл (0) возможность выхода на баре входа
SetOption         ("ActivateStopsImmediately",0);       // Вкл (1) выкл (0) активацию стопа на баре входа
SetOption         ("ReverseSignalForcesExit",1);         // Вкл (1) выкл (0) вход в противоположную позицию при противп. сигнале

Или нет?

А PriceBuy = 0;
PriceShort = 0;
PriceSell = 0;
PriceCover = 0;
Перед циклом вообще нужно писать?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Июн 23, 2009 4:08 pm Ответить с цитатой Вернуться к началу

SetOption ("ActivateStopsImmediately",0);
Это только для функции ApplyStop()

SetOption ("AllowSameBarExit",0);
SetOption ("ReverseSignalForcesExit",1);
А это смотря как надо по логике системы

Цитата:

А PriceBuy = 0;
PriceShort = 0;
PriceSell = 0;
PriceCover = 0;
Перед циклом вообще нужно писать?

Не надо.

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



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

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

Олег, спасибо огромное.

Вроде заработало как надо.
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen