Добрый вечер ув. форумчане.
Давно не писал ничего в велс-лабе 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 не хватает).
EUR/USD и GBP/USD у локальных вершин: как меняется валютный баланс
Евро в среду впервые за восемь сессий слегка снижается против доллара, но само движение пока выглядит скорее как техническая коррекция после сильного подъема, чем как разворот. Отчет по...
Производитель дженериков отчитался по МСФО за 2025 год Озон Фармацевтика (OZPH) ➡️ Инфо и показатели Результаты — выручка: ₽31,6 млрд (+24% год к году), — скорр. EBITDA:...
В утреннем эфире поговорили с Элвисом Марламовым, автором проекта Alenka Capital. Обсудили положение российского рынка, перспективы ключевых эмитентов и разные стратегии. Определили, какие...
Что делать с валютой: капитулировать перед высокими ценами на нефть или наращивать позицию?
Здравствуйте! С учетом высокой волатильности на валютном рынке, считаю необходимым актуализировать взгляд на валютную позицию.
В сентябре был установлен рейтинг 4 для облигаций и спот...
adrian72, А разве я сильно утверждал, что я не помню и у меня нет памяти. Это вы здесь додумываете за меня и Кожемяко. Я отвечаю по факту. Половина конечно не ваших, но подобных измышлений на форум...
📈 Индекс S&P 500 достиг нового исторического максимума на фоне сообщений о продолжении американо-иранских переговоров 📈 Индекс S&P 500 достиг нового исторического максимума на фоне сообщений о про...
🏃♂️ Бесконечная карусель вкладов: Куда нести деньги, когда закончились родственники? Привет, друзья! Весна 2026 года, ставка ЦБ плавно спускается к 15%. Но психология массового инвестора не поспевает...
🏃♂️ Бесконечная карусель вкладов: Куда нести деньги, когда закончились родственники? Привет, друзья! Весна 2026 года, ставка ЦБ плавно спускается к 15%. Но психология массового инвестора не поспевает...
Есть ф-я перебора по всем позициям 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)
Первый вариант попроще но надо рассчитывать все уровни и условия на предыдущий бар.