Приветствую!
Реализовать это очень легко, для этого есть функции:
CurrentPL() – возвращает текущий доход по открытой позиции в валюте инструмента (рубли или пункты).
CurrentPLper() –  возвращает изменение цены в процентах относительно учетной  цены по открытой позиции в процентах.
Если нужна разница в пунктах от средней цены до текущей, то это тоже можно узнать через
Input1.Close[0] - цена последнего закрытия доступная нам в момент принятия решения (хотя если быть точнее момент этот это первая сделка на следующем баре)
AverPrice() – возвращает учетную цену открытой позиции
Учетная цена – средневзвешенная цена сделок, которые увеличивают текущую открытую позицию по роботу 
Вычисляем разницу Math.Abs(AverPrice() - Input1.Close[0]) и принимаем решение
NIKON писал(а):Если они отличаются менее, чем на заданную величину (например, в процентах), то отказаться от закрытия и дождаться следующего момента
Момент может не наступить и придётся закрывать по цене хуже чем была возможность.
Опишите подробнее что вы хотите получить в условие на выходе, покажу как это сделать на примере этой стратегии.
По тому что описали выше код может быть таким:
Код: Выделить всё
/**
**/
function Initialize()
{
   StrategyName = "VStop";
   AddParameter("Length", 20, "", 1);
   AddParameter("Mult", 2, "", 1);
   AddParameter("Period", 1, "", 1);
   AddParameter("SL", 2, "StopLoss %", 1);
   AddParameter("TP", 4, "TakeProfit %", 1);
   AddInput("I", Inputs.Candle, 60, true, "");
   LongLimit = 1000;
   ShortLimit = -1000;
   AddChartIndicator("MY.VStop", new Dictionary <string, string>{{"length", "Length"},{"mult", "Mult"},{"period", "Period"},{"O", "0"},{"H", "0"},{"L", "0"},{"C", "1"}});   
}
function OnUpdate()
{
   // evge 22.07.2018 http://alfadirect4.ru
   var VS = MY.VStop(I, Length, Mult, Period, 0, 0, 0, 1);
   var VSUp = VS["Up"];
   var VSDn = VS["Dn"];
   if (VSUp[0] > 0 && VSDn[1] > 0) 
   if (CurrentPLper() >= TP || CurrentPosition() == 0)
      { 
      EnterLong();
      StopLoss(SL, SignalPriceType.DeltaInPercentFromAveragePrice);
      }
      
   if (VSDn[0] > 0 && VSUp[1] > 0)
   if (CurrentPLper() >= TP || CurrentPosition() == 0)
      { 
      EnterShort();
      StopLoss(SL, SignalPriceType.DeltaInPercentFromAveragePrice);
      }
}Здесь переворот будет только если по открытой позиции % изменения цены выше или равен параметру TP в %