Topics
27 Mar 2017, 10:55
 2227
 2
Replies

201058436
28 Mar 2017, 11:30

RE:

AthenasGuidance said:

I've solved this problem, the updated code below works:

        protected override void OnTick()
        {
            {
            try {
                if (MoveToBreakEven == true)
                    {
                    
                    var PositionLong = Positions.Find("OpenLong");
                    var PositionPriceLong = ((PositionLong.EntryPrice * Symbol.PipSize) + (PositionLong.Pips * Symbol.PipSize));
                    var BEStopLossTriggerLong = ((PositionLong.EntryPrice * Symbol.PipSize) + (BETriggerWhenGaining * Symbol.PipSize));
                    var BEStopLossLong = (PositionLong.EntryPrice + AdditionalAfterBE);
                    var BETakeProfitLong = (PositionLong.EntryPrice + TakeProfitAllPips);
                    
                    if (PositionPriceLong >= BEStopLossTriggerLong)
                        {
                            ModifyPositionAsync(PositionLong, BEStopLossLong, BETakeProfitLong);
                        }
                    }
                } catch (Exception e)
                {
                    Print("{0} ", e.StackTrace);
                }
            }
            //Break Even Short
            {
            try {
                if (MoveToBreakEven == true)
                    {
                    
                    var PositionShort = Positions.Find("OpenShort");
                    var PositionPriceShort = ((PositionShort.EntryPrice * Symbol.PipSize) - (PositionShort.Pips * Symbol.PipSize));
                    var BEStopLossTriggerShort = ((PositionShort.EntryPrice * Symbol.PipSize) - (BETriggerWhenGaining * Symbol.PipSize));
                    var BEStopLossShort = (PositionShort.EntryPrice - AdditionalAfterBE);
                    var BETakeProfitShort = (PositionShort.EntryPrice - TakeProfitAllPips);
                    
                    if (PositionPriceShort <= BEStopLossTriggerShort)
                        {
                            ModifyPositionAsync(PositionShort, BEStopLossShort, BETakeProfitShort);
                        }
                    }
                } catch (Exception e)
                {
                    Print("{0} ", e.StackTrace);
                }
            }
        }

 


@201058436

201058436
27 Mar 2017, 20:25

RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE:

AthenasGuidance said:

done

I've sent you an email, did you get it?

I don't know why, but that code should have solve the issue?!? ..I'm sorry it didn't.


@201058436

201058436
27 Mar 2017, 18:42

RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE:

done

I've sent you an email, did you get it?


@201058436

201058436
27 Mar 2017, 17:48

RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE:

handiphangceo@gmail.com said:

AthenasGuidance said:

AthenasGuidance said:

It could be because of the foreach statement (Position instead of (var PositionLong..

And you may need these before the foreach statements:

            var PositionLong = Positions.Find("Buy", null, TradeType.Buy);
            var PositionShort = Positions.Find("Sell, null, TradeType.Sell);

 

alot or error > . <

sure i can show you, send me your email address

 

Email: AthenasGuidance@sharklasers.com

It's a temporary disposable email.


@201058436

201058436
27 Mar 2017, 17:05

RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE:

AthenasGuidance said:

It could be because of the foreach statement (Position instead of (var PositionLong..

And you may need these before the foreach statements:

            var PositionLong = Positions.Find("Buy", null, TradeType.Buy);
            var PositionShort = Positions.Find("Sell, null, TradeType.Sell);

 


@201058436

201058436
27 Mar 2017, 16:39

RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE:

handiphangceo@gmail.com said:

build succeeded but cannot execute buy or sell, anyway thanks for helping me sir, i hope someone can help yours too :)

It could be because of the foreach statement (Position instead of (var PositionLong..

        {  
            foreach (var PositionLong in Positions.FindAll("Buy", null, TradeType.Buy))
            foreach (var PositionShort in Positions.FindAll("Sell", null, TradeType.Sell))
            {
                if (PositionLong.SymbolCode != Symbol.Code && PositionLong.Label == "Buy")
                    ExecuteMarketOrder(TradeType.Buy, Symbol, Volume, "Buy", StopLossPips, TakeProfitPips);
                else if (PositionShort.SymbolCode != Symbol.Code && PositionShort.Label == "Sell")
                    ExecuteMarketOrder(TradeType.Sell, Symbol, Volume, "Sell", StopLossPips, TakeProfitPips);
            }
        }
    }
}

 


@201058436

201058436
27 Mar 2017, 15:58

RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE:

handiphangceo@gmail.com said:

build succeeded but cannot execute buy or sell, anyway thanks for helping me sir, i hope someone can help yours too :)

Would it be alright to have a look at your code in full, even if it has to be privately exchanged?


@201058436

201058436
27 Mar 2017, 15:40

RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE:

AthenasGuidance said:

Please change the second foreach functions label from "Buy" to "Sell".


@201058436

201058436
27 Mar 2017, 15:31

RE: RE: RE: RE: RE: RE: RE: RE: RE: RE:

AthenasGuidance said:

AthenasGuidance said:

        {  
            foreach (Position PositionLong in Positions.FindAll("Buy", null, TradeType.Buy))
            foreach (Position PositionShort in Positions.FindAll("Buy", null, TradeType.Buy))
            {
                if (PositionLong.SymbolCode != Symbol.Code && PositionLong.Label == "Buy")
                    ExecuteMarketOrder(TradeType.Buy, Symbol, Volume, "Buy", StopLossPips, TakeProfitPips);
                else if (PositionShort.SymbolCode != Symbol.Code && PositionShort.Label == "Sell")
                    ExecuteMarketOrder(TradeType.Buy, Symbol, Volume, "Sell", StopLossPips, TakeProfitPips);
            }
        }
    }
}

I don't know what happened to the previous code.


@201058436

201058436
27 Mar 2017, 15:30

RE: RE: RE: RE: RE: RE: RE: RE: RE:

AthenasGuidance said:

        {  
            foreach (Position PositionLong in Positions.FindAll("Buy", null, TradeType.Buy))
            foreach (Position PositionShort in Positions.FindAll("Buy", null, TradeType.Buy))
            {
                if (PositionLong.SymbolCode != Symbol.Code && PositionLong.Label == "Buy")
                    ExecuteMarketOrder(TradeType.Buy, Symbol, Volume, "Buy", StopLossPips, TakeProfitPips);
                else if (PositionShort.SymbolCode != Symbol.Code && PositionShort.Label == "Sell")
                    ExecuteMarketOrder(TradeType.Buy, Symbol, Volume, "Sell", StopLossPips, TakeProfitPips);
            }
        }
    }
}

 

I wish there were a way to edit a post or simply delete them entirely.


@201058436

201058436
27 Mar 2017, 15:29

RE: RE: RE: RE: RE: RE: RE: RE:
 
            foreach (Position Position in Positions.FindAll("Buy", null, TradeType.Buy))
            foreach (Position Position in Positions.FindAll("Sell", null, TradeType.Sell))

@201058436

201058436
27 Mar 2017, 15:28

RE: RE: RE: RE: RE: RE: RE:

AthenasGuidance said:

You may also have to add this:

&& Position.Label == "Buy")

..and of course, an else if function for the "Sell" positions.

For example:

using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.API.Requests;
using cAlgo.Indicators;

namespace cAlgo.Robots
{
    [Robot(TimeZone = TimeZones.CentralStandardTime, AccessRights = AccessRights.None)]
    public class BigBarRobot : Robot
    {
        [Parameter("Volume:", DefaultValue = 1, MinValue = 1, Step = 1)]
        public int Volume { get; set; }
        [Parameter("StopLossPips:", DefaultValue = 10, MinValue = 1, Step = 0.5)]
        public double StopLossPips { get; set; }
        [Parameter("TakeProfitPips:", DefaultValue = 20, MinValue = 1, Step = 0.5)]
        public double TakeProfitPips { get; set; }

protected override void OnBar()
        {  
            foreach (Position Position in Positions.FindAll("Buy", null, TradeType.Buy))
            foreach (Position Position in Positions.FindAll("Buy", null, TradeType.Buy))
            {
                if (Position.SymbolCode != Symbol.Code && Position.Label == "Buy")
                    ExecuteMarketOrder(TradeType.Buy, Symbol, Volume, "Buy", StopLossPips, TakeProfitPips);
                else if (Position.SymbolCode != Symbol.Code && Position.Label == "Sell")
                    ExecuteMarketOrder(TradeType.Buy, Symbol, Volume, "Sell", StopLossPips, TakeProfitPips);
            }
        }
    }
}

And then of course, add all of your other IF statements that you need, your other conditions.


@201058436

201058436
27 Mar 2017, 15:25

RE: RE: RE: RE: RE: RE:

You may also have to add this:

&& Position.Label == "Buy")

 


@201058436

201058436
27 Mar 2017, 15:18

RE: RE: RE: RE: RE:

handiphangceo@gmail.com said:

Yes Sir.

i sorry for my broken English, 

so why im asking the code is because the bot keep opening multiple transaction, example : it buy EURUSD, then another minute it buy EURUSD again.

i want to check if i already have EURUSD opened, then the bot no need to open position anymore. But i want them to keep able buy/sell another pair :)

Try this, if it doesn't work, I can't help you anymore.. my programming is too limited:

 protected override void OnBar()
        {        
            foreach (Position Position in Positions.FindAll("Buy", null, TradeType.Buy))
            {
                if (Position.SymbolCode != Symbol.Code)
                    ExecuteMarketOrder(TradeType.Buy, Symbol, Volume, "Buy", StopLossPips, TakeProfitPips);
            }
        }

@201058436

201058436
27 Mar 2017, 14:43

RE: RE: RE:

handiphangceo@gmail.com said:

 

Hi, i tried and i can only open position for 1 transaction :)

 

 

What do you mean by 'Transaction'?

,,Do you mean pair?


@201058436

201058436
27 Mar 2017, 14:04

RE: RE:

AthenasGuidance said:

handiphangceo@gmail.com said:

hellow, can you check is this correct..

 

protected override void OnBar()
        {
            var positionsBuy = Positions.FindAll("Buy");
            var positionsSell = Positions.FindAll("Sell");

            var distanceFromUpKumo = (Symbol.Bid - ichimoku.SenkouSpanA.Last(26)) / Symbol.PipSize;
            var distanceFromDownKumo = (ichimoku.SenkouSpanA.Last(26) - Symbol.Ask) / Symbol.PipSize;



            if (MarketSeries.Open.Last(1) <= ichimoku.SenkouSpanA.Last(27) && MarketSeries.Open.Last(1) > ichimoku.SenkouSpanB.Last(27))
            {
                if (MarketSeries.Close.Last(1) > ichimoku.SenkouSpanA.Last(27))
                {
                    if (distanceFromUpKumo <= 25)
                    {

                       //but if i put this way, i can only have 1 opened position at one momment, am i right ?

                        if (position.TradeType != TradeType.Buy && TradeType.Sell)

                        {
                        ExecuteMarketOrder(TradeType.Buy, Symbol, Volume, "Buy", StopLossPips, TakeProfitPips);

                        }
                    }
                }
            }

 

 

Hi Handi

I'm sorry I don't think that is correct ..however, I could be wrong.

If the previous code did not work, try the one below, the previous one was written not copied and pasted:

using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.API.Requests;
using cAlgo.Indicators;

namespace cAlgo.Robots
{
    [Robot(TimeZone = TimeZones.CentralStandardTime, AccessRights = AccessRights.None)]
    public class BigBarRobot : Robot
    {
        [Parameter("Volume:", DefaultValue = 1, MinValue = 1, Step = 1)]
        public int Volume { get; set; }
        [Parameter("StopLossPips:", DefaultValue = 10, MinValue = 1, Step = 0.5)]
        public double StopLossPips { get; set; }
        [Parameter("TakeProfitPips:", DefaultValue = 20, MinValue = 1, Step = 0.5)]
        public double TakeProfitPips { get; set; }

 protected override void OnBar()
        {
            //Search All Positions Open And Label That Search "TotalPositions"
            var TotalPositions = Positions.Count;
            {
                //If The Search Labeled "TotalPositions" Reports That No Position Is Open (Null or Less Than 1 or zero), Then, ExecuteMarketOrder
                if (TotalPositions < 1)
                    ExecuteMarketOrder(TradeType.Buy, Symbol, Volume, "Buy", StopLossPips, TakeProfitPips);
            }
        }
    }
}

Enjoy.

 

..Now I only wish someone would help me with my coding problem.. "/forum/cbot-support/11404".


@201058436

201058436
27 Mar 2017, 13:55

RE:

handiphangceo@gmail.com said:

hellow, can you check is this correct..

 

protected override void OnBar()
        {
            var positionsBuy = Positions.FindAll("Buy");
            var positionsSell = Positions.FindAll("Sell");

            var distanceFromUpKumo = (Symbol.Bid - ichimoku.SenkouSpanA.Last(26)) / Symbol.PipSize;
            var distanceFromDownKumo = (ichimoku.SenkouSpanA.Last(26) - Symbol.Ask) / Symbol.PipSize;



            if (MarketSeries.Open.Last(1) <= ichimoku.SenkouSpanA.Last(27) && MarketSeries.Open.Last(1) > ichimoku.SenkouSpanB.Last(27))
            {
                if (MarketSeries.Close.Last(1) > ichimoku.SenkouSpanA.Last(27))
                {
                    if (distanceFromUpKumo <= 25)
                    {

                       //but if i put this way, i can only have 1 opened position at one momment, am i right ?

                        if (position.TradeType != TradeType.Buy && TradeType.Sell)

                        {
                        ExecuteMarketOrder(TradeType.Buy, Symbol, Volume, "Buy", StopLossPips, TakeProfitPips);

                        }
                    }
                }
            }

 

 

Hi Handi

I'm sorry I don't think that is correct ..however, I could be wrong.

If the previous code did not work, try the one below, the previous one was written not copied and pasted:

using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.API.Requests;
using cAlgo.Indicators;

namespace cAlgo.Robots
{
    [Robot(TimeZone = TimeZones.CentralStandardTime, AccessRights = AccessRights.None)]
    public class BigBarRobot : Robot
    {
        [Parameter("Volume:", DefaultValue = 1, MinValue = 1, Step = 1)]
        public int Volume { get; set; }
        [Parameter("StopLossPips:", DefaultValue = 10, MinValue = 1, Step = 0.5)]
        public double StopLossPips { get; set; }
        [Parameter("TakeProfitPips:", DefaultValue = 20, MinValue = 1, Step = 0.5)]
        public double TakeProfitPips { get; set; }

 protected override void OnBar()
        {
            //Search All Positions Open And Label That Search "TotalPositions"
            var TotalPositions = Positions.Count;
            {
                //If The Search Labeled "TotalPositions" Reports That No Position Is Open (Null or Less Than 1 or zero), Then, ExecuteMarketOrder
                if (TotalPositions < 1)
                    ExecuteMarketOrder(TradeType.Buy, Symbol, Volume, "Buy", StopLossPips, TakeProfitPips);
            }
        }
    }
}

Enjoy.


@201058436

201058436
27 Mar 2017, 11:09

RE: Hi Handi

AthenasGuidance said:

//Changed spelling mistake.

I'm new to programming, so please take this with a grain of salt:

            //Check To See If Any Pending Orders Are Open
            var TotalOrders = Position.Count;

            {
                //Check if TotalOrders (any position) is open, if so, do not go to next line
                if (TotalOrders = null)
                    
                    //next line
                    ExecuteMarketOrder()
            }

Hope it helps.

 


@201058436

201058436
27 Mar 2017, 11:08

Hi Handi

I new to programming, so please take this with a grain of salt:

            //Check To See If Any Pending Orders Are Open
            var TotalOrders = Position.Count;

            {
                //Check if TotalOrders (any position) is open, if so, do not go to next line
                if (TotalOrders = null)
                    
                    //next line
                    ExecuteMarketOrder()
            }

Hope it helps.


@201058436