インジケーターを作成する

API で独自のインジケーターを作成する方法は、カスタムインジケーター セクションで説明されています。このようなインジケーターは Designer と完全に互換性があります。

インジケーターを作成するには、スキーム パネルで インジケーター フォルダーを選択し、右クリックしてコンテキストメニューから 追加 を選択する必要があります。

Designer_Source_Code_Indicator_00

インジケーターのコードは次のようになります。

/// <summary>
/// パラメーターを保存および読み込む方法を示すサンプルインジケーターです。
/// 入力価格を +20% または -20% 変更します。
///
/// その他の例:
/// https://github.com/StockSharp/StockSharp/tree/master/Algo/Indicators
///
/// ドキュメント:
/// https://doc.stocksharp.com/topics/designer/strategies/using_code/fsharp/create_own_indicator.html
/// </summary>
type EmptyIndicator() as this =
	inherit BaseIndicator()

	// 内部フィールド
	let mutable changeValue = 20
	let mutable counter = 0
	let mutable isFormedValue = false

	/// <summary>
	/// 入力価格を変更するために使用されるパーセンテージ値 (+/-)。
	/// </summary>
	member this.Change
		with get () = changeValue
		and set value =
			changeValue <- value
			this.Reset()

	/// <summary>
	/// インジケーターが形成済みかどうか (取引準備ができたかどうか) を定義します。
	/// </summary>
	override this.CalcIsFormed() = isFormedValue

	/// <summary>
	/// インジケーターを初期状態にリセットします。
	/// </summary>
	override this.Reset() =
		base.Reset()
		isFormedValue <- false
		counter <- 0

	/// <summary>
	/// 入力値を処理するメインロジックです。
	/// </summary>
	override this.OnProcess(input: IIndicatorValue) : IIndicatorValue =
		// 10 回に 1 回、"空" の値を返そうとします。
		if RandomGen.GetInt(0, 10) = 0 then
			// 空の値には時刻のみが含まれ、実データは含まれません。
			DecimalIndicatorValue(this, input.Time)
		else
			// 呼び出しごとにカウンターを増やします。
			counter <- counter + 1

			// 5 つの入力後、インジケーターは形成済みと見なされます。
			if counter = 5 then
				isFormedValue <- true

			let mutable value = input.ToDecimal()

			// +/- Change% の係数でランダムに変更します。
			let randomFactor = decimal (RandomGen.GetInt(-changeValue, changeValue)) / 100m
			value <- value + (value * randomFactor)

			// 最終的なインジケーター値を返します。
			let result = DecimalIndicatorValue(this, value, input.Time)
			// final としてマークするかどうかをランダムに決めます。
			result.IsFinal <- RandomGen.GetBool()
			result

	/// <summary>
	/// 指定された <see cref="SettingsStorage"/> からインジケーター設定を読み込みます。
	/// </summary>
	override this.Load(storage: SettingsStorage) =
		base.Load(storage)
		this.Change <- storage.GetValue<int>(nameof(this.Change))

	/// <summary>
	/// 指定された <see cref="SettingsStorage"/> にインジケーター設定を保存します。
	/// </summary>
	override this.Save(storage: SettingsStorage) =
		base.Save(storage)
		storage.SetValue(nameof(this.Change), this.Change)

	/// <summary>
	/// 現在の <see cref="Change"/> 値を含む文字列表現です。
	/// </summary>
	override this.ToString() =
		sprintf "Change: %d" this.Change

このインジケーターは入力値を受け取り、設定された 変更 パラメーター値に基づいて任意の偏差を加えます。

インジケーターメソッドの説明は、カスタムインジケーター セクションで確認できます。

作成したインジケーターをダイアグラムに追加するには、インジケーター キューブを使用し、その中で必要なインジケーターを指定する必要があります。

Designer_Source_Code_Indicator_01

インジケーターコードで以前に設定した 変更 パラメーターは、プロパティパネルに表示されます。

Warning

F# コードのインジケーターは、F# コードで作成されたストラテジーでは使用できません。キューブから作成されたストラテジーでのみ使用できます。