help with wealth-lab 4
Добрый вечер ув. форумчане.
Давно не писал ничего в велс-лабе 4
Сейчас столкнулся с проблемой — допустим у меня есть 4 активные позиции, мне надо закрыть их по частям. Я пишу:
if (условие 1) then SellAtMarket(Bar+1,? ,'');
...
if (условие 4) then SellAtMarket(Bar+1,? ,'');
Что надо написать, чтобы закрывала только последнюю еще активную позицию, а не все разом?
Вопрос вроде не сложный, если кто активно занимается, напишите пожалуйста.
Заранее спасибо.
Есть ф-я перебора по всем позициям PositionCount
Я пишу:
for i := PositionCount — 1 downto 0 do
begin
if PositionActive( i ) then
begin
SellAtMarket( Bar + 1, i, '' );
end;
Но закрываются также все позы
условие входа
buyatclose(bar,"");
запоминаем номер крайней открытой позиции в переменную pos1
попробую код поискать щас
«допустим у меня есть 4 активные позиции»
тут не надо сплитить
BuyAtMarket(Bar+1,'one');
pos1:=LastPosition;
…
BuyAtMarket(Bar+1,'four');
pos4:=LastPosition;
SellAtLimit(Bar+1,fProfitPrice1,pos1,'profit1')
…
SellAtLimit(Bar+1,fProfitPrice4,pos4,'profit1')
проходит одной пачкой
При чем даже если:
BuyAtMarket(Bar+1,'one');
pos1:=LastPosition;
…
BuyAtMarket(Bar+1,'four');
pos4:=LastPosition;
SellAtLimit(Bar+1,fProfitPrice1,pos1,'profit1')
Тоже самое, т.е. pos1 кроет всю позу
А Вы тестируете с какими настройками, на сделку 1 лот или процент от капитала какой нибудь?
Завтра попробую код прислать.
захожу 4 раза по 20% от эквити
Было бы круто посмотреть на работающий участок кода, где это реализовано, спасибо
var Bar: integer;
var pos1position, pos1num, pos2position, pos2num, pos3position, pos3num: integer;
pos1position:=0;
pos2position:=0;
pos3position:=0;
for Bar := 20 to BarCount — 1 do begin
{position1}
case pos1position of
0:
begin
if priceclose(bar)>priceclose(bar-1) then begin
buyatclose(bar,'le1');
pos1position:=1;
pos1num:=lastposition;
end;
end;
1:
begin
if priceclose(bar)<priceclose(bar-1) then begin
sellatclose(bar,pos1num,'lx1');
pos1position:=0;
end;
end;
end;
{position2}
case pos2position of
0:
begin
if priceclose(bar)>priceclose(bar-2) then begin
buyatclose(bar,'le2');
pos2position:=1;
pos2num:=lastposition;
end;
end;
1:
begin
if priceclose(bar)<priceclose(bar-2) then begin
sellatclose(bar,pos2num,'lx2');
pos2position:=0;
end;
end;
end;
{position3}
case pos3position of
0:
begin
if priceclose(bar)>priceclose(bar-3) then begin
buyatclose(bar,'le3');
pos3position:=1;
pos3num:=lastposition;
end;
end;
1:
begin
if priceclose(bar)<priceclose(bar-3) then begin
sellatclose(bar,pos3num,'lx3');
pos3position:=0;
end;
end;
end;
end;
1.переделать на торговлю на bar а не на следующем. Проверять исполняется ли условие pricelow(bar)<limit(bar-1) и тогда считать что лимит исполнен и считать позицию открытой.
2.подглядывать исполняется ли условие на следующем баре pricelow(bar+1)<limit
3.использовать bar+1 и на следующем баре смотреть pricelow(bar)<limit(bar-1)
Первый вариант попроще но надо рассчитывать все уровни и условия на предыдущий бар.