Автор |
Сообщение |
ild.w
Зарегистрирован: 16.06.2012
Сообщения: 5
|
Код: |
Buy = 0;
MA5=Ref(MA(C,5),-1);
selllevel=0;
//=======LONG======
for( i = 1; i < BarCount; i++)
{
if (C[i] > MA5[i] & pos ==0)
{
Buy[i] = 1;
BuyPrice[i] = С[i];
Bbuyprice = BuyPrice[i];
pos = 1;
k = MA5[i]-C[i];
selllevel = aaa(k,Bbuyprice);
}
if (pos==1 & C[i] < selllevel)
{
Sell[i] = 1;
SellPrice[i] = selllevel;
}
}
function aaa (k, Bbuyprice);
{
rezult=Bbuyprice-k;
return rezult;
} |
сил уже нет - как только не пробовал - подскажите как использовать функцию |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Чначало описаниефункции, потом её вызов
Код: |
// описание функции
function aaa (k, Bbuyprice);
{
rezult = Bbuyprice-k;
return rezult;
}
Buy = 0;
MA5=Ref(MA(C,5),-1);
selllevel=0;
//=======LONG======
for( i = 1; i < BarCount; i++)
{
if (C[i] > MA5[i] & pos ==0)
{
Buy[i] = 1;
BuyPrice[i] = С[i];
Bbuyprice = BuyPrice[i];
pos = 1;
k = MA5[i]-C[i];
selllevel = aaa(k,Bbuyprice); // вызов функции
}
if (pos==1 & C[i] < selllevel)
{
Sell[i] = 1;
SellPrice[i] = selllevel;
}
}
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ild.w
Зарегистрирован: 16.06.2012
Сообщения: 5
|
"pos" превратился в массив - хотя я хочу использовать ее как переменную - есть ли возможность объявлять переменные |
|
|
Посмотреть профиль Отправить личное сообщение |
|
ild.w
Зарегистрирован: 16.06.2012
Сообщения: 5
|
Код: |
// описание функции
function aaa (k, Bbuyprice);
{
rezult = Bbuyprice-k;
return rezult;
}
Buy = 0;
MA5=Ref(MA(C,5),-1);
pos = 0;
selllevel=0;
//=======LONG======
for( i = 1; i < BarCount; i++)
{
if (C[i] > MA5[i] & pos ==0)
{
Buy[i] = 1;
BuyPrice[i] = С[i];
Bbuyprice = BuyPrice[i];
pos = 1;
k = MA5[i]-C[i];
selllevel = aaa(k,Bbuyprice); // вызов функции
}
if (pos==1 & C[i] < selllevel)
{
Sell[i] = 1;
SellPrice[i] = selllevel;
}
} |
после присвоения 1 pos становиться массивом и на 2 условии " if (pos==1 & C[i] < selllevel)" выходит ошибка связанная с циклом |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ну давай смотреть.
тут
Код: |
function aaa (k, Bbuyprice);
|
";" не надо
тут
надо не русскую с а английскую C
тут
Код: |
if (pos==1 & C[i] < selllevel)
{
Sell[i] = 1;
SellPrice[i] = selllevel;
}
|
надо обнулить позиуию
В общем должно быть так
Код: |
SetBarsRequired(sbrAll, sbrAll);
function aaa(k, Bbuyprice)
{
rezult = Bbuyprice - k;
return rezult;
}
MA5 = Ref(MA(C, 5), -1);
pos = 0;
selllevel = 0;
//=======LONG======
for( i = 1; i < BarCount; i++)
{
if(C[i] > MA5[i] AND pos == 0)
{
Buy[i] = 1;
BuyPrice[i] = C[i];
Bbuyprice = BuyPrice[i];
pos = 1;
k = MA5[i] - C[i];
selllevel = aaa(k, Bbuyprice);
}
else if(pos == 1 AND L[i] < selllevel)
{
Sell[i] = 1;
pos = 0;
SellPrice[i] = selllevel;
}
}
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ild.w
Зарегистрирован: 16.06.2012
Сообщения: 5
|
Код: |
function sellalllevel(pos1long, pos2long, pos3long, pos4long, step, selllevel)
{
if (pos1long==False) rezult=selllevel;
if (pos1long==True) rezult=selllevel;
if (pos2long==True) rezult=selllevel+step;
if (pos3long==True) rezult=selllevel+step+step;
if (pos4long==True) rezult=selllevel+step+step+step;
return rezult;
}
//coverlevel=Ref(HHV(H,5),-1);
//SetPositionSize(1,4); //Торгуемое количество лотов
SetPositionSize(4000,1); //Торгуемое количество денег
SetTradeDelays( 0, 0, 0, 0 ); //Задержка торгов
SetOption("InitialEquity", 50000); //Начальный депозит
SetOption("AllowSameBarExit", True); //Запрет выхода на баре входа
SetOption("ActivateStopsImmediately", True); //Немедленная активация стопов
SetOption("AllowPositionShrinking", True);
//Разрешить окрывать позицию размером меньше заданного (при недостатке средств)
SetOption("FuturesMode", False); //Режим маржинальной торговли
//SetOption("CommissionMode", 2); //Режим комиссии
//SetOption("CommissionAmount",(KomBir+KomBro)/2); //Величина комиссии
RoundLotSize=1;
SetOption( "PriceBoundChecking", True);
buyunit1level=Ref(HHV(H,20),-1);
ATR10=Ref(ATR(10),-1);
Buy = 0;
Short = 0;
pos1long=False; pos2long=False; pos3long=False; pos4long=False;
step=0;
buyunit2level=0; buyunit3level=0; buyunit4level=0;
selllevel=0;
//shortunit2level=0; shortunit3level=0; shortunit4level=0;
//=======LONG======
for( i = 1; i < BarCount; i++)
{
if (H[i]> buyunit1level[i] AND (pos1long==False OR pos2long==False OR pos3long==False OR pos4long==False))
{
Buy[i] = 1;
BuyPrice[i] = buyunit1level[i]; //+ 5*TickSize;
if (O[i]>buyunit1level[i]) BuyPrice[i] = O[i];
selllevel=buyunit1level[i]-2*ATR10;
step=(buyunit1level[i]-selllevel)/2;
buyunit2level=buyunit1level[i]+step;
buyunit3level=buyunit1level[i]+step+step;
buyunit4level=buyunit1level[i]+step+step+step;
pos1long=True;
}
//================
if (H[i]> buyunit2level AND pos1long==True)
{
Buy[i] = sigScaleIn;
BuyPrice[i] = buyunit2level; //+ 5*TickSize;
if (O[i]>buyunit2level) BuyPrice[i] = O[i];
pos2long=True;
}
if (H[i]> buyunit3level AND pos2long==True)
{
Buy[i] = sigScaleIn;
BuyPrice[i] = buyunit3level ; //+ 5*TickSize;
if (O[i]>buyunit3level) BuyPrice[i] = O[i];
pos3long=True;
}
if (H[i]> buyunit4level AND pos3long==True)
{
Buy[i] = sigScaleIn;
BuyPrice[i] = buyunit4level ; //+ 5*TickSize;
if (O[i]>buyunit4level) BuyPrice[i] = O[i];
pos4long=True;
}
//poss=pos;
//================
aaa = sellalllevel (pos1long, pos2long, pos3long, pos4long, step, selllevel);
if (L[i]< aaa & (pos1long==True OR pos2long==True OR pos3long==True OR pos4long==True))
{
Sell[i] = 1;
SellPrice[i] = aaa; // sellall_level;
if (O[i]<aaa) SellPrice[i] = O[i]; // sellall_level
pos1long=False; pos2long=False; pos3long=False; pos4long=False;
}
/*else
{
Sell[i] = 0;
}*/
}
|
вот такая простая система. вначале вместо pos1long использовал просто pos и присваивал этой переменной число. не пошло при условии if пишет Error 6. Condition in IF, WHILE, FOR statements has to be Numeric or Boolean type. You can not use array here, please use [] (array subscript operator) to access array elements
Поменял pos на логическую переменную pos1long. на текущий момент выходит таже ошибка - ругается на buyunit2level buyunit3level buyunit4level говорит что это массив -
ps желательно б конечно вернутся к pos=1,2 и тд - если конечно это реально |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вроде не ругается
Код: |
function sellalllevel(fpos, fstep, fselllevel)
{
if (fpos == 0) rezult = selllevel;
else if (fpos == 1) rezult = fselllevel;
else if (fpos == 2) rezult = fselllevel + fstep;
else if (fpos == 3) rezult = fselllevel + fstep*2;
else if (fpos == 4) rezult = fselllevel + fstep*3;
return rezult;
}
SetPositionSize(4000, 1);
SetTradeDelays( 0, 0, 0, 0 );
SetOption("InitialEquity", 50000);
SetOption("AllowSameBarExit", True);
SetOption("AllowPositionShrinking", True);
SetOption("FuturesMode", False);
RoundLotSize = 1;
buyunit1level = Ref(HHV(H, 20), -1);
ATR10 = Ref(ATR(10),-1);
Buy = Short = pos = step = 0;
buyunit2level = buyunit3level = buyunit4level = selllevel = 0;
//=======LONG======
for( i = 1; i < BarCount; i++)
{
if(H[i] > buyunit1level[i] AND pos == 0)
{
Buy[i] = 1;
BuyPrice[i] = buyunit1level[i]; //+ 5*TickSize;
if (O[i] > buyunit1level[i])
BuyPrice[i] = O[i];
else
BuyPrice[i] = buyunit1level[i];
selllevel = buyunit1level[i] - 2*ATR10[i];
step = (buyunit1level[i] - selllevel)/2;
buyunit2level = buyunit1level[i] + step;
buyunit3level = buyunit1level[i] + step*2;
buyunit4level = buyunit1level[i] + step*3;
pos = 1;
}
//================
else if(H[i] > buyunit2level AND pos == 1)
{
Buy[i] = sigScaleIn;
if (O[i] > buyunit2level)
BuyPrice[i] = O[i];
else
BuyPrice[i] = buyunit2level;
pos = 2;
}
else if (H[i] > buyunit3level AND pos == 2)
{
Buy[i] = sigScaleIn;
if (O[i] > buyunit3level)
BuyPrice[i] = O[i];
else
BuyPrice[i] = buyunit3level;
pos = 3;
}
else if (H[i] > buyunit4level AND pos == 3)
{
Buy[i] = sigScaleIn;
if (O[i] > buyunit4level)
BuyPrice[i] = O[i];
else
BuyPrice[i] = buyunit4level;
pos == 4;
}
//================
aaa = sellalllevel(pos, step, selllevel);
if (L[i] < aaa & (pos > 0))
{
Sell[i] = 1;
if (O[i] < aaa)
SellPrice[i] = O[i];
else
SellPrice[i] = aaa;
pos = 0;
}
}
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Ильдар
Зарегистрирован: 10.07.2012
Сообщения: 10
|
Возникло еще несколько вопросов
на одной свече срабатывает только 1 условие sigScaleIn - так и задумано - или я что то не то сделал.
если на одной свече срабатывает sigScaleIn, а также сигнал на продажу - то Тестер сначала закрывает всю позицию - затем открывается на 1 sigScaleIn и поз. вместо закрытой становиться на 1 sigScaleIn в лонге
как обеспечить вход на 1-ой свече допустим по 3-м сигналам sigScaleIn, или сделать при каждом наступившем уровне добавления юнита выполнять полную продажу и закупку двойным лотом |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ильдар писал(а): |
Возникло еще несколько вопросов
на одной свече срабатывает только 1 условие sigScaleIn - так и задумано - или я что то не то сделал.
|
Так и задумано. Ной свече может быть только одна BuyPrce, а множественное добавление подрзумевает разные цены добавки.
Ильдар писал(а): |
если на одной свече срабатывает sigScaleIn, а также сигнал на продажу - то Тестер сначала закрывает всю позицию - затем открывается на 1 sigScaleIn и поз. вместо закрытой становиться на 1 sigScaleIn в лонге
|
А как Ами может узнать что делать сперва?
Помниться Томашь писал, что в таком случае срабатывает худший вариант.
Ильдар писал(а): |
как обеспечить вход на 1-ой свече допустим по 3-м сигналам sigScaleIn, или сделать при каждом наступившем уровне добавления юнита выполнять полную продажу и закупку двойным лотом |
Никак. Вообще следует выбирать фрейм так, чтобы на одном баре был только один сигнал. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|