Страница 1 из 1

Sentiment: настроение в течение дня

Добавлено: 18 апр 2020, 15:43
BugsDigger
Основан на значениях Ask/Bid; по мотивам DeltaCumLine/DeltaDay.

Код: Выделить всё

function Initialize()
{
 IndicatorName = "Sentiment";
 PriceStudy=false;
 AddInput("Input", Inputs.Candle);           
 AddSeries("Ask", DrawAs.Line, Color.Green);
 AddSeries("Bid", DrawAs.Line, Color.Red);
 AddLevel(50.0, Color.Black, "Ask");

 AddParameter("Period", 0);     // 0: от начала дня; >0: бегущее окно, но в пределах дня
 AddParameter("Relative", 0);   // 0: ask/bid абсолютные; 1: в процентах к общему объему
 
 AddGlobalVariable("AskCum", Types.Double, 0.0);
 AddGlobalVariable("BidCum", Types.Double, 0.0);
 AddGlobalVariable("VolCum", Types.Double, 0.0);
 AddGlobalVariable("DayIndex", Types.Int, 0);
}

function Evaluate()
{
 if(BarDate(0)>BarDate(1) || CurrentIndex==0)
 {
  AskCum=0.0;
  BidCum=0.0;
  VolCum=0.0;
  DayIndex=CurrentIndex;
 }
 
 AskCum+=Input.VolumeAsk[0];
 BidCum+=Input.VolumeBid[0];

 if(Period>0 && DayIndex+Period<=CurrentIndex)
 {
  AskCum-=Input.VolumeAsk[-Period];
  BidCum-=Input.VolumeBid[-Period];
 }
 
 if(Relative!=0)
 {
  VolCum+=Input.Volume[0];
  if(Period>0 && DayIndex+Period<=CurrentIndex) VolCum-=Input.Volume[-Period];
 
  if(VolCum>0)
  {
   Ask=AskCum/VolCum*100.0;
   Bid=BidCum/VolCum*100.0;
  }
  else { Ask=0; Bid=0; }
 }
 else { Ask=AskCum; Bid=BidCum; }
}
Смысл видится в том, чтобы согласовывать открытие позиции с общим настроением дня/последнего времени; например, если некий индикатор советует открыть лонг, то вряд ли стоит это делать, когда большинство сделок проходит по Bid (или в условиях неясного настроения).

Также можно попробовать задать уровень (>50%), при пробое которого вверх настроение можно считать достаточно определенным.

Ну и на кривые Ask и Bid можно пробовать навесить какие-то индикаторы, смотреть их пересечения и т.п.

Sentiment.png