Category Trend  Published on 22/12/2022

Progressive Stoch

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! 


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);
        }
    }


}


DR
drilonhametaj

Joined on 22.12.2022

  • Distribution: Free
  • Language: C#
  • Trading platform: cTrader Automate
  • File name: Investo Investigando - Stoch ordinato + 3EMA.algo
  • Rating: 5
  • Installs: 1448
Comments
Log in to add a comment.
WE
weelmedia · 1 year ago

Everything is very open and honest, and the challenges are broken down in great detail. The information is without a doubt beneficial to have. Is my website extremely successful in terms of making money? Please take a look at this: trap the cat