- Desktop
- Tools
- PASCAL Programming
- Choppiness Index Programing
Choppiness Index Programing
The following code is an example of the Choppiness Index Programing
var Plot1 : TPlot; ATRData : TDataList; ChopPeriod : TIntegerProperty;
procedure DefineTool(Tool : TTool); begin Tool.Name := 'Choppiness Index'; Tool.Key := '210189E5-77AF-4616-B5A1-04829030C11E'; Tool.MouseClicks := 0; Tool.Hint := ''; Tool.ToolGroup := 'Price'; Tool.ToolType := ttDataView; end;
procedure Init(Tool : TTool); var aLine : TLine; begin Plot1 := Tool.AddPlot(); Plot1.Color := 2; Plot1.PlotStyle := Line; Plot1.FillColor := 2; Plot1.Caption := 'Choppiness Plot';
aLine := Tool.AddHLine(61.8, 2); aLine := Tool.AddHLine(50, 3); aLine := Tool.AddHLine(38.2, 1);
ChopPeriod := Tool.AddInteger('CHOP', 'Choppiness Period', 14); end;
function Sum(aList : TDataList; iStartIndex : Integer; iCount : Integer) : Double; var j : integer; begin Result := 0; for j := iStartIndex downto iStartIndex - iCount + 1 do begin if (j >= 0) and (j aList.Count) then Result := Result + aList[j].Close; end; end;
function Max(aList : TDataList; iStartIndex : Integer; iCount : Integer) : Double; var j : integer; rMax : Real; begin Result := 0; for j := iStartIndex downto iStartIndex - iCount + 1 do begin if (j >= 0) and (j aList.Count) then begin rMax := aList.Row[j].High; if (j > 0) and (aList.Row[j-1].Close > rMax) then rMax := aList.Row[j-1].Close; if Result rMax then Result := rMax; end; end; end;
function Min(aList : TDataList; iStartIndex : Integer; iCount : Integer) : Double; var j : integer; rMin : Real; begin Result := 1E1000; for j := iStartIndex downto iStartIndex - iCount + 1 do begin if (j >= 0) and (j aList.Count) then begin rMin := aList.Row[j].Low; if (j > 0) and (aList.Row[j-1].Close rMin) then rMin := aList.Row[j-1].Close; if Result > rMin then Result := rMin; end; end; end;
procedure Process(Tool : TTool; ProcessStart : Integer; ProcessEnd : Integer; DataIn : TDataList); var i : Integer; rAtr, rMaxHi, rMinLo : Double; begin ATRData := ATR('BARS=1'); for i:= ProcessStart to ProcessEnd do begin rAtr := Sum(ATRData, i, ChopPeriod.Variable); rMaxHi := Max(DataIn, i, ChopPeriod.Variable); rMinLo := Min(DataIn, i, ChopPeriod.Variable); Plot1.Row[i].Date := DataIn.Row[i].Date; Plot1.Row[i].Hidden := i ChopPeriod.Variable; if (rAtr 0) and (rMaxHi rMinLo) then Plot1.Row[i].Close := 100 *Log10(rAtr/(rMaxHi-rMinLo))/Log10(ChopPeriod.Variable) else Plot1.Row[i].Close := 0; end;
end;Forum Discussion
Your privacy choices
We use cookies and similar technologies to make the site work, see how it's used, and improve it. Analytics and advertising cookies only run with your consent — see our Privacy Policy for details.