Originally Posted By: Alaxan
Вот часть листинга скрипта.
for (int bar = StartBar; bar < barsCount; bar++)
{
ShortPos = source.Positions.GetLastActiveForSignal("SN");
LongPos = source.Positions.GetLastActiveForSignal("LN");
if ((ShortPos == null))
{
if ((ShortPrice > 0) && (LongPos == null) )
{
source.Positions.SellIfLess(bar+1, 1, ShortPrice, "SN");

}
ShortPos = source.Positions.GetLastActiveForSignal("SN");

}
else
{
if (CoverPrice > 0)
{

ShortPos.CloseAtStop(bar+1, CoverPrice, "SX");
ShortPos.CloseAtProfit(bar+1,CloseShortPrice, "TPS");

ctx.Log("TPS = "+ CloseShortPrice.ToString()+" "+ CoverPrice.ToString(),1);
}
}
//==============================================================================
// выполнение сигналов для длинной позиции
LongPos = source.Positions.GetLastActiveForSignal("LN");
ShortPos = source.Positions.GetLastActiveForSignal("SN");
if ((LongPos == null) )
{
if ((BuyPrice > 0) && (ShortPos==null) )
{
source.Positions.BuyIfGreater(bar+1, 1, BuyPrice, "LN");
}
LongPos = source.Positions.GetLastActiveForSignal("LN");
}
else
{
if (SellPrice > 0)
{

LongPos.CloseAtStop(bar+1, SellPrice, "LX");
LongPos.CloseAtProfit(bar+1, CloseLongPrice, "TPL");

ctx.Log("TPL = "+ CloseLongPrice.ToString()+" "+ SellPrice.ToString(),1);
}
}
}
}

Подчеркнутые строки лишние. В реальном времени позиция будет открыта позже.
Если ShortPrice, BuyPrice, CoverPrice, CloseShortPrice, SellPrice, CloseLongPrice - локальные переменные, то их значения надо рассчитывать каждый раз. Между пересчетами скрипта их значения не сохраняются.