Добрый вечер ув. форумчане.
Давно не писал ничего в велс-лабе 4
Сейчас столкнулся с проблемой — допустим у меня есть 4 активные позиции, мне надо закрыть их по частям. Я пишу:
if (условие 1) then SellAtMarket(Bar+1,? ,'');
...
if (условие 4) then SellAtMarket(Bar+1,? ,'');
Что надо написать, чтобы закрывала только последнюю еще активную позицию, а не все разом?
Вопрос вроде не сложный, если кто активно занимается, напишите пожалуйста.
Заранее спасибо.
nfxzhzh, Как узнать номер?
Есть ф-я перебора по всем позициям PositionCount
Я пишу:
for i := PositionCount — 1 downto 0 do
begin
if PositionActive( i ) then
begin
SellAtMarket( Bar + 1, i, '' );
end;
Но закрываются также все позы
{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;
roev_ae, с лимитами у Вас 3 варианта получается навскидку.
1.переделать на торговлю на bar а не на следующем. Проверять исполняется ли условие pricelow(bar)<limit(bar-1) и тогда считать что лимит исполнен и считать позицию открытой.
2.подглядывать исполняется ли условие на следующем баре pricelow(bar+1)<limit
3.использовать bar+1 и на следующем баре смотреть pricelow(bar)<limit(bar-1)
Первый вариант попроще но надо рассчитывать все уровни и условия на предыдущий бар.
ну и по сайзу позиций попробуйте отладить сначала торговлю одним лотом, с долей капитала может в какой то момент не хватать (купили 2, в просадке и на 3 не хватает).
ДОМ.РФ представил результаты по МСФО за январь–февраль 2026 года, которые отражают заметное ускорение динамики финансовых показателей. Чистая прибыль за отчетный период выросла на 94% г/г, до 18,4...
Коммерческая недвижимость под контролем: что даёт профессиональное управление активами
Почему управление коммерческой недвижимостью сложнее, чем арендой квартиры? Что такое Asset Management и какие задачи он решает? Как управление недвижимостью влияет на финансовые результаты...
Компания Россети Ленэнерго опубликовала финансовый отчет за 2025г. по МСФО. Отчет МСФО и РСБУ у сетевых компаний очень похожи, а так как я отчет РСБУ (отчет об исполнении...
К примеру почему всегда летает то, в чем не сидишь, знакомая картинка? Да потому что толпы заряжаются туда, куда их аккуратненько толкают. Проблема в банках — надо срочно продавать, кругом все негатив...
Сохранение текущей цены отсечения в 2026 году может оказать поддержку рублю. Аналитики допускают, что этом году средний курс рубля может составить 81–82 руб. за доллар — Ведомости Минфин не стал раскр...
Сохранение текущей цены отсечения в 2026 году может оказать поддержку рублю. Аналитики допускают, что этом году средний курс рубля может составить 81–82 руб. за доллар — Ведомости Минфин не стал раскр...
Когда объявили об открытой подписке акции обвалились. (Открытая хуже закрытой) Объявили о закрытой подписке опять обвалились. (Открытая лучше закрытой) ???
Вова Кожемяко, она заезженная, везде из каждого утюга визжащая и уже отыгранная по фактам что имеем:
1) из произошедших событий ясно, что у компании напряженная ситуация с ликвидностью — вопрос в...
Недельный объем погрузки зерна в Новороссийске вырос до 549 тыс. т
23 марта 2026 12:00
На прошлой неделе в порту Новороссийск на суда было погружено 549,4 тыс. т зерна, в т.ч. 511,6 тыс. т пшеницы...
84148, Спасибо за поддержку. Как по-мне так на тематических форумах новые люди со свежими взглядами — большой плюс — это всегда возможность посмотреть на вопрос со стороны, а, возможно, что и внест...
Есть ф-я перебора по всем позициям 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)
Первый вариант попроще но надо рассчитывать все уровни и условия на предыдущий бар.