Всем здравствуйте!
Перечитал свои старые посты в этой ветке, попытался закодить что мне нужно, но никак не получается.
1)Есть котировки дневного графика, нужно по простому условию на бар(1) открыть позицию по цене открытия на бар(0) и закрыть позицию по цене закрытия на бар(0). Т.е. поза держится один день. 
2)Есть котировки дневного графика, нужно по простому условию на бар(1) открыть позицию по цене открытия на бар(0) и закрыть позицию по цене закрытия на бар(+1). Т.е. поза держится 2 дня.
Все что у меня получилось "закодить" - это открыть на бар(0), но закрыть только на открытии бар(1), т.е. позиция продержалась до открытия следующего дня, а нужно закрыть по цене закрытия в день открытия. Т.к. завтра может быть гэп, а он мне не нужен.
Открывать позицию можно в любую сторону тут разницы нет купить или продать,(главное закрыть в день открытия), т.к. это просто тест на предмет того, а стоит ли дальше тестить или не стоит. А по условию 2) держать два дня и закрыть по закрытию второго дня. 
Может кто-нибудь пример кода написать или мой исправить/подправить? 
Для дневного графика такое в ForexTester 4 можно закодить или нужно обязательно на внутридневные котировки переходить? Спасибо.
Мое пример для одного дня, но не совсем правильный:
Код: Выделить всё
library TSTSTS;
uses
  SysUtils, Classes, StrategyInterfaceUnit, TechnicalFunctions, DateUtils, Math;
var
//Назначение внешних параметров
//Назначение внутренних параметров
  Currency: PChar = nil;
  LotSize: double;
 OrderHandle: integer;
 LastTime: TDateTime;
 WidthChannel: double;
OrderStyle: TTradePositionType;
OpenTime: TDateTime;
 {-----Init strategy----------------------------------------------------------}
 procedure InitStrategy; stdcall;
//Процедура инициализации
 //Описание стратегии
 //Регистрация внешних параметров
 //Создание собственных объектов
begin
  StrategyShortName('AUDUSD');
  StrategyDescription('AUDUSD');
  RegOption('Currency', ot_Currency, Currency);
  ReplaceStr(Currency, 'AUDUSD');
  RegOption('LotSize', ot_Double, LotSize);
  SetOptionDigits('LotSize', 1);
  lotSize := 0.01;
end;
{-----Done strategy----------------------------------------------------------}
procedure DoneStrategy; stdcall;
begin
  FreeMem(Currency);
end;
{-----Reset strategy---------------------------------------------------------}
procedure ResetStrategy; stdcall;
begin
//  OrderHandle := -1;
  LastTime := 0;
end;
{-----Process single tick----------------------------------------------------}
procedure GetSingleTick; stdcall;
//var
//;
begin
  // проверяем нашу валюту
  if Symbol <> Currency then exit;
  // устанавливаем валюту и таймфрейм
  SetCurrencyAndTimeFrame('AUDUSD', PERIOD_D1);
     // если BUY ордер существует, то закрыть ордер
      if (OrderHandle <> -1) and (OrderStyle = tp_Buy) and
      (OpenTime <> Time(0))
    then
  begin
    CloseOrder(OrderHandle);
    OrderHandle := -1;
  end;
// если нет открытых ордеров и ..... то
 if (OrderHandle = -1) and (Open(1) > Close(1)) then
    begin
    SendInstantOrder('AUDUSD', op_Buy, 0.01, 0, 0, '', 0, OrderHandle);
    OrderStyle := tp_Buy;
    OpenTime := Time(0);
     end;
  end;
  exports
InitStrategy,
DoneStrategy,
ResetStrategy,
GetSingleTick;
end.
Например в wealthlab это делается очень просто:
Код: Выделить всё
if (A>B) then  
if ShortAtMarket(Bar+1, 'SellOpen') then
    begin
   TakePrice := PositionEntryPrice ( LastPosition ) - Take;
   StopPrice := PositionEntryPrice ( LastPosition ) + Loss;
if PriceLow( Bar+1 ) < TakePrice then
        CoverAtLimit( Bar+1 , TakePrice, LastPosition, 'Take Profit' )
        else
if PriceHigh( Bar+1 ) > StopPrice then
        CoverAtStop( Bar+1 , StopPrice, LastPosition, 'Stop Loss' )
        else
        CoverAtClose(Bar+1 , LastPosition, 'BuyClose');
для удержания двух дней - просто добавляем условие:
if PriceLow( Bar+2 ) < TakePrice then
        CoverAtLimit( Bar+2 , TakePrice, LastPosition, 'Take Profit' )
        else
if PriceHigh( Bar+2 ) > StopPrice then
        CoverAtStop( Bar+2 , StopPrice, LastPosition, 'Stop Loss' )
        else
        CoverAtClose(Bar+2 , LastPosition, 'BuyClose');