Progressive Stoch free

by drilonhametaj in category Trend at 22/12/2022
Description

- This cBots works with EURUSD, AUDUSD, EURAUD, EURGBP, GBPUSD, NZDUSD, USDCAD, USDCHF, USDJPY

- TimeFrame 4h

- Not use StopLoss and for this reason you need to set lots carefully

Here some example screen of backtesting

Backtesting

backtestingResults

 

Here the settings

  • EurUsd
    • takeProfit: 15
    • stopLoss: 100000
    • hourEnter: 2
    • hourExit: 23
    • fastPeriod: 55
    • slowPeriod: 250
    • lots: check in lots section
    • maxOrder: 2 (depends how many MAX orders you want to have open in the same time)
    • stochLength: 19
    • stochParams: 2
  • AudUsd
    • takeProfit: 7
    • stopLoss: 100000
    • hourEnter: 5
    • hourExit: 19
    • fastPeriod: 45
    • slowPeriod: 210
    • lots: check in lots section
    • maxOrder: 2 (depends how many MAX orders you want to have open in the same time)
    • stochLength: 16
    • stochParams: 2
  • EurAud
    • takeProfit: 31
    • stopLoss: 100000
    • hourEnter: 6
    • hourExit: 20
    • fastPeriod: 65
    • slowPeriod: 250
    • lots: check in lots section
    • maxOrder: 2 (depends how many MAX orders you want to have open in the same time)
    • stochLength: 23
    • stochParams: 6
  • EurGbp
    • takeProfit: 19
    • stopLoss: 100000
    • hourEnter: 2
    • hourExit: 23
    • fastPeriod: 45
    • slowPeriod: 260
    • lots: check in lots section
    • maxOrder: 2 (depends how many MAX orders you want to have open in the same time)
    • stochLength: 7
    • stochParams: 2
  • GbpUsd
    • takeProfit: 15
    • stopLoss: 100000
    • hourEnter: 0
    • hourExit: 21
    • fastPeriod: 45
    • slowPeriod: 110
    • lots: check in lots section
    • maxOrder: 2 (depends how many MAX orders you want to have open in the same time)
    • stochLength: 9
    • stochParams: 3
  • NzdUsd
    • takeProfit: 9
    • stopLoss: 100000
    • hourEnter: 9
    • hourExit: 23
    • fastPeriod: 20
    • slowPeriod: 210
    • lots: check in lots section
    • maxOrder: 2 (depends how many MAX orders you want to have open in the same time)
    • stochLength: 19
    • stochParams: 3
  • UsdCad
    • takeProfit: 11
    • stopLoss: 100000
    • hourEnter: 9
    • hourExit: 18
    • fastPeriod: 25
    • slowPeriod: 240
    • lots: check in lots section
    • maxOrder: 2 (depends how many MAX orders you want to have open in the same time)
    • stochLength: 24
    • stochParams: 3
  • UsdChf
    • takeProfit: 17
    • stopLoss: 100000
    • hourEnter: 8
    • hourExit: 19
    • fastPeriod: 45
    • slowPeriod: 260
    • lots: check in lots section
    • maxOrder: 2 (depends how many MAX orders you want to have open in the same time)
    • stochLength: 17
    • stochParams: 5
  • UsdJpy
    • takeProfit: 8
    • stopLoss: 100000
    • hourEnter: 4
    • hourExit: 17
    • fastPeriod: 50
    • slowPeriod: 130
    • lots: check in lots section
    • maxOrder: 2 (depends how many MAX orders you want to have open in the same time)
    • stochLength: 15
    • stochParams: 3

Lots to use by your account balance:

  • from: 100$  to: 500$  use 0.01 lots
  • from: 500$  to: 1.000$  use 0.03 lots  
  • from: 1.000$  to: 2.000$  use 0.06 lots
  • from: 2.000$  to: 5.000$  use 0.1 lots
  • from: 5.000$  to: 10.000$  use 0.3 lots
  • from: 10.000$  to: 15.000$  use 0.5 lots
  • from: 15.000$  to: 20.000$  use 1 lots 
  • from: 20.000$ + use 2 lots  and add 1 lot for each 10k
  •  

To respect this rules it's important for your money management! Don't rush, let the money work for you! 

Warning! Executing the following cBot may result in loss of funds. Use it at your own risk.
Notification Publishing copyrighted material is strictly prohibited. If you believe there is copyrighted material in this section you may use the Copyright Infringement Notification form to submit a claim.
Formula / Source Code
Language: C#
Trading Platform: cAlgo
using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;

namespace cAlgo.Robots
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class IIScalping : Robot
    {

        [Parameter("Source", Group = "Data series")]
        public DataSeries Source { get; set; }

        [Parameter(DefaultValue = 10)]
        public double takeProfit { get; set; }

        [Parameter(DefaultValue = 10)]
        public double stopLoss { get; set; }

        [Parameter(DefaultValue = 8)]
        public int hourEnter { get; set; }

        [Parameter(DefaultValue = 18)]
        public int hourExit { get; set; }

        [Parameter(DefaultValue = 60)]
        public int fastPeriod { get; set; }

        [Parameter(DefaultValue = 240)]
        public int slowPeriod { get; set; }

        [Parameter(DefaultValue = 0.01)]
        public double lots { get; set; }

        [Parameter(DefaultValue = 1)]
        public int maxOrder { get; set; }

        [Parameter(DefaultValue = 8)]
        public int stochLength { get; set; }

        [Parameter(DefaultValue = 3)]
        public int stochParams { get; set; }

        private ExponentialMovingAverage emaFast;
        private ExponentialMovingAverage emaSlow;
        private StochasticOscillator stoch;
        
        double stochLevel = 0.0;


        protected override void OnStart()
        {
            // Put your initialization logic here

        }

        protected override void OnBar()
        {
            // Put your core logic here
            emaFast = Indicators.ExponentialMovingAverage(Source, fastPeriod);
            emaSlow = Indicators.ExponentialMovingAverage(Source, slowPeriod);
            stoch = Indicators.StochasticOscillator(stochLength, stochParams, stochParams, MovingAverageType.Exponential);
            
            
            int currentBar = Bars.Count - 1;
            bool check = checkTime();
            var positions = Positions.FindAll("Order");
            if (check == true)
            {
                

                //Open(TradeType.Buy, lots);
                
                if(emaFast.Result.LastValue > emaSlow.Result.LastValue && stoch.PercentK[currentBar] > stoch.PercentD[currentBar] && stoch.PercentK[currentBar - 1] <= 20 && stochLevel == 0.0){
                    stochLevel = Bars.LastBar.Close;
                }
                
                if(emaFast.Result.LastValue < emaSlow.Result.LastValue && stoch.PercentK[currentBar] < stoch.PercentD[currentBar] && stoch.PercentK[currentBar - 1] >= 80 && stochLevel == 0.0){
                    stochLevel = Bars.LastBar.Close;
                }

                if (emaFast.Result.LastValue > emaSlow.Result.LastValue && stoch.PercentK[currentBar] > stoch.PercentD[currentBar] && stoch.PercentK[currentBar - 1] <= 20 && Bars.LastBar.Close > stochLevel)
                {
                    stochLevel = 0.0;
                    //stopLoss = (Bars[currentBar-1].Close - Bars[currentBar-1].Low)*100000;
                    Open(TradeType.Buy, lots);
                }

                if (emaFast.Result.LastValue < emaSlow.Result.LastValue && stoch.PercentK[currentBar] < stoch.PercentD[currentBar] && stoch.PercentK[currentBar - 1] >= 80 && Bars.LastBar.Close < stochLevel)
                {
                    stochLevel = 0.0;
                    //stopLoss = (Bars[currentBar-1].High - Bars[currentBar-1].Close)*100000;
                    Open(TradeType.Sell, lots);
                }

            }
            
            if(positions.Length>0 && (positions[0].TradeType == TradeType.Buy)){
                if(stoch.PercentK[currentBar] >= 80){
                    Close(TradeType.Buy);
                }
            }
            
            
            if(positions.Length>0 && (positions[0].TradeType == TradeType.Buy)){
                if(stoch.PercentK[currentBar] <= 20){
                    Close(TradeType.Sell);
                }
            }

        }

        protected override void OnStop()
        {
            // Put your deinitialization logic here
        }

        private bool checkTime()
        {
            DateTime date = Server.Time;
            if (date.Hour >= hourEnter && date.Hour <= hourExit)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        private void Close(TradeType tradeType)
        {
            foreach (var position in Positions.FindAll("Order", SymbolName, tradeType))
                ClosePosition(position);
        }

        private void Open(TradeType tradeType, double lots)
        {
            var position = Positions.FindAll("Order", SymbolName, tradeType);
            var volumeInUnits = Symbol.QuantityToVolumeInUnits(lots);
            if (position == null || position.Length < maxOrder)
                ExecuteMarketOrder(tradeType, SymbolName, volumeInUnits, "Order", stopLoss, takeProfit);
        }
    }


}
Comments

jackbacha2 - January 10, 2023 @ 14:53

Most of the time I don’t make comments on websites, but I'd like to say that this article really forced me to do so. Really nice post! rattan garden furniture

5