Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
1.8 kB
1
Indexable
Never
private Stochastic stochastic;

protected override void OnStart()
{
    stochastic = Indicators.Create<Stochastic>(Bars.LowPrices, Bars.HighPrices, Bars.ClosePrices, 14, 3, 3, 0, SmoothMethod.Exponential);
}

protected override void OnTick()
{
    // Check if a new bar has formed
    if (Bars.OpenTimes.LastValue > lastBarTime)
    {
        lastBarTime = Bars.OpenTimes.LastValue;

        int index = Bars.ClosePrices.Count - 1; // Index of the last closed bar

        if (fastMA.Result.HasCrossedAbove(slowMA.Result, index) && IsHigherTimeframeUptrend())
        {
            // Calculate Stochastic Oscillator values
            double mainLineValue = stochastic.MainLine.Result.LastValue;
            double signalLineValue = stochastic.SignalLine.Result.LastValue;

            double entryPrice = Symbol.Bid; // You can use Ask for buy orders
            double stopLoss = entryPrice - Symbol.PipSize * 20; // Example stop loss
            double takeProfit = entryPrice + Symbol.PipSize * 40; // Example take profit

            // Check Stochastic Oscillator conditions
            if (mainLineValue > signalLineValue && mainLineValue > 20)
            {
                TradeResult buyResult = ExecuteMarketOrder(TradeType.Buy, SymbolName, Symbol.NormalizeVolumeInUnits(Symbol.LotSize),
                                                          "Buy Order", stopLoss, takeProfit, null);

                if (buyResult.IsSuccessful)
                {
                    Print("Buy order executed at price: " + buyResult.EntryPrice);
                }
                else
                {
                    Print("Buy order failed: " + buyResult.Error);
                }
            }
        }
    }
}