Добрый вечер ув. форумчане.
Давно не писал ничего в велс-лабе 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: Пан или пропал? Ретест треугольника ставит ультиматум
Европейская валюта, протестировав сопротивление 1.1918, повторно устремилась вниз для ретеста пробитой границы треугольника. На этот раз касание трендовой линии выглядит максимально уверенным....
Обострение ситуации вокруг Ирана: как будет реагировать рынок?
Геополитическая премия в ценах на нефть снова увеличивается, и котировки Brent поднимаются выше $70 за баррель. СМИ пестрят заголовками о возможном ударе США по Ирану, несмотря на прошедшие...
Россети Ленэнерго. Отчет об исполнении инвестпрограммы за Q4 2025г. Опасения оправдались - обесценение съело прибыль
Компания Россети Ленэнерго опубликовала отчет об исполнении инвестпрограммы за Q4 2025г., где показаны финансовые показатели компании по РСБУ в 4 квартале (ну и понятно за целый год):...
Evgeny,
28 апреля сд — рекомендует, а вот 25 февраля с отчетом МСФО могут сказать какой % будут рекомендовать, вероятно 35% — 13,54р на акцию (15% дивидендная доходность к нынешней цене) Но м...
ivbg.ru/8420596-v-ssha-zayavili-o-stremlenii-amerikanskih-kompaniy-vernut-sya-v-rossiyu.html. Если так то может быть и снимут санкции, но это думаем не скоро будет все равно
СМИ: президентские выборы на Украине могут пройти осенью 2026 года
МОСКВА, 21 фев — РИА Новости. Президентские выборы на Украине могут пройти уже осенью 2026 года, а парламентские — весной 2027 г...
Сокол, Можно сливаться если произошёл технический дефолт эмитента, а если всё отлично, то НЕ вижу смысла куда то уходить. Сейчас за три месяца придёт купон то снова реинвестирую в Л-Старт 02 тем бо...
sasa sasa, берите пример с молодого Жириновского. Ему ТОГДА надоело все ЭТО терпеть, и он стал политиком, создал свою партию, вошел в историю.
Делайте так же! Мы за вас проголосуем:)))
Есть ф-я перебора по всем позициям 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)
Первый вариант попроще но надо рассчитывать все уровни и условия на предыдущий бар.