Андрей Роев
Андрей Роев личный блог
25 июня 2013, 22:39

help with wealth-lab 4

Добрый вечер ув. форумчане.
Давно не писал ничего в велс-лабе 4
Сейчас столкнулся с проблемой — допустим у меня есть 4 активные позиции, мне надо закрыть их по частям. Я пишу:
if (условие 1) then SellAtMarket(Bar+1,? ,'');
...
if (условие 4) then SellAtMarket(Bar+1,? ,''); 

Что надо написать, чтобы закрывала только последнюю еще активную позицию, а не все разом?

Вопрос вроде не сложный, если кто активно занимается, напишите пожалуйста.
Заранее спасибо. 
16 Комментариев
  • quant_trader
    25 июня 2013, 22:55
    sellatclose(bar, номер позиции,"") как то так.
      • quant_trader
        25 июня 2013, 23:09
        roev_ae, не надо узнавать, запоминайте когда открываете позицию в переменную т е что то типа

        условие входа
        buyatclose(bar,"");
        запоминаем номер крайней открытой позиции в переменную pos1

        попробую код поискать щас
        • quant_trader
          25 июня 2013, 23:13
          pos1:=lastposition;
  • alt
    25 июня 2013, 23:02
    Ещё можно глянуть в хэлпе WL функцию SplitPosition
    • quant_trader
      25 июня 2013, 23:15
      alt, если позиция одна то да но по условиям
      «допустим у меня есть 4 активные позиции»
      тут не надо сплитить
        • quant_trader
          25 июня 2013, 23:34
          roev_ae, сейчас не могу проверить но вообще Вы покупаете на следующем баре и позиция еще не открыта.

          А Вы тестируете с какими настройками, на сделку 1 лот или процент от капитала какой нибудь?

          Завтра попробую код прислать.
            • quant_trader
              26 июня 2013, 09:53
              roev_ae, вот по закрытиям как то так

              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;
            • quant_trader
              26 июня 2013, 09:59
              roev_ae, с лимитами у Вас 3 варианта получается навскидку.

              1.переделать на торговлю на bar а не на следующем. Проверять исполняется ли условие pricelow(bar)<limit(bar-1) и тогда считать что лимит исполнен и считать позицию открытой.

              2.подглядывать исполняется ли условие на следующем баре pricelow(bar+1)<limit

              3.использовать bar+1 и на следующем баре смотреть pricelow(bar)<limit(bar-1)

              Первый вариант попроще но надо рассчитывать все уровни и условия на предыдущий бар.
            • quant_trader
              26 июня 2013, 10:04
              ну и по сайзу позиций попробуйте отладить сначала торговлю одним лотом, с долей капитала может в какой то момент не хватать (купили 2, в просадке и на 3 не хватает).

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн