Skip to main content

HX101 C# For Trading Scripts

HX101 teaches only the C# you need before building indicators and strategies. The goal is not general software engineering. The goal is to read bars, hold state, calculate risk, and avoid runtime errors.

Current script model

This lesson targets the established, release-compatible HyperionX.Custom model in HyperionX 1.1.10. The active release-candidate source also contains a runtime host generator for direct HyperionX.SDK indicator and strategy subclasses, but that adapter remains Preview and unreleased until it is included in and verified with the signed installer. Do not substitute the SDK lifecycle in these public examples. See API Status And Compatibility and Lifecycle Reference.

Lesson 1: Values

Trading scripts mostly use these types:

TypeUse
intBar indexes, periods, counts, tick values.
doublePrices, indicator values, quantities, PnL.
boolFeature toggles and signal flags.
stringOrder names, drawing tags, status text.
DateTimeBar timestamps and session filters.
enumControlled options such as direction, mode, or signal type.

Use DateTime[0] for the current bar timestamp. Use System.DateTime.Now only when you need the computer clock.

double close = Close[0];
double priorClose = Close[1];
bool barClosedUp = Close[0] > Open[0];
int currentHour = DateTime[0].Hour;

Lesson 2: Conditions

Most trading logic is a chain of guarded decisions.

if (CurrentBar < 20)
return;

bool crossedUp = Close[0] > Close[1] && Close[1] <= Close[2];

if (crossedUp)
Print("Signal at " + DateTime[0]);

Never read Close[20] unless you first proved that at least 21 bars exist.

Lesson 3: Methods

Move repeated calculations into small methods. A method should answer one question.

private double TicksToPrice(int ticks)
{
return ticks * TickSize;
}

private bool IsTradingHour()
{
int hour = DateTime[0].Hour;
return hour >= 9 && hour < 16;
}

Lesson 4: State

State is information that must survive across bars.

private double _entryPrice;
private int _entryBar = -1;
private bool _targetHit;

private void ResetTradeState()
{
_entryPrice = 0;
_entryBar = -1;
_targetHit = false;
}

Initialize trade state in State.Configured, then reset it again when a trade fully exits. Indicator-only state can have a different reset boundary.

Lesson 5: Collections

Use collections for grouped values. For bar-aligned output, use Series<T>.

private readonly List<double> _recentRanges = new();
private Series<double> _signal;
private Series<int> _barState;

Series<double> is the normal plotted output type. Series<int> is useful for internal bar classifications, but it is not a price plot by itself.

Exercise

Build a helper class or method set that calculates:

  • Stop price from entry price and stop ticks.
  • Target price from entry price and target ticks.
  • Risk/reward from stop ticks and target ticks.
  • Whether the current bar is inside a trading window.

Completion check:

  • No bar read happens before enough bars exist.
  • DateTime[0] is used for bar time.
  • Helper methods do not place orders or draw UI.
  • The example compiles through the full Code Lab project, not only in an external editor.

Continue with Series And Bars Reference before relying on multi-series indexing.