Topics
05 Sep 2012, 09:20
 0
 4263
 5
Replies

fzlogic
25 Oct 2013, 16:56

RE:

Hyperloop said:

That case where the GetSymbol method is called and the parameter is an invalid string (see title for example), what would the return be? null?

No, the method will crash:
Crashed in OnBar with ArgumentException: Symbol "CADUSD" does not exist 
use try... catch block

try
{
    Symbol USDCAD = MarketData.GetSymbol("CADUSD");
    Print("USDCAD {0}", USDCAD);
}
catch (Exception ex)
{
    Print("Invalid Symbol code.  {0}", ex.Message);
}

@fzlogic

fzlogic
04 Oct 2013, 10:08

RE:

t4fast said:

Hi !

thanks for your time and effort,
yes, code is working fine now , without any problems.

There is one thing that needs correction in the last line:
 

//md sl
    if (position.TakeProfit == tp && position.StopLoss != sl)
        if (!sl.Equals(0.0))
            Trade.ModifyPosition(position, sl, position.TakeProfit);
        else if (tp.Equals(0.0) && sl.Equals(0.0))
            Trade.ModifyPosition(position, null, position.TakeProfit);
// change to this
//md sl
    if (position.TakeProfit == tp && position.StopLoss != sl)
        if (!sl.Equals(0.0))
            Trade.ModifyPosition(position, sl, position.TakeProfit);
        else
            Trade.ModifyPosition(position, null, position.TakeProfit);

 


@fzlogic

fzlogic
03 Oct 2013, 12:54

Yeah, there seems to be something that is not exactly working. Even though positions opened in cTrader do get modified when I test your code, sometimes not all positions get modified.
Maybe too many requests to modify a position. 

I tried modifying the code to this and it seems to be working better, give it a try and see it the same problem persists:

you also need to include the Linq namespace.

using System.Linq;

...

            // modify 
            foreach (Position position in Account.Positions.Where(position => Symbol.Code == position.SymbolCode))
            {
                double sl = position.TradeType == TradeType.Buy ? _slB : _slS;
                double tp = position.TradeType == TradeType.Buy ? _tpB : _tpS;

                if (position.TakeProfit == tp && position.StopLoss == sl)
                    continue;

                if (position.TakeProfit != tp && position.StopLoss != sl)
                {
                    if (!tp.Equals(0.0) && !sl.Equals(0.0))
                        Trade.ModifyPosition(position, sl, tp);

                    else if (tp.Equals(0.0) && sl.Equals(0.0))
                        Trade.ModifyPosition(position, null, null);

                    else if (tp.Equals(0.0) && !sl.Equals(0.0))
                        Trade.ModifyPosition(position, sl, null);
                    else
                        Trade.ModifyPosition(position, null, tp);
                    continue;
                }
                // md tp
                if (position.TakeProfit != tp && position.StopLoss == sl)
                {
                    if (!tp.Equals(0.0))
                        Trade.ModifyPosition(position, position.StopLoss, tp);
                    else
                        Trade.ModifyPosition(position, position.StopLoss, null);
                    continue;
                }

                //md sl
                if (position.TakeProfit == tp && position.StopLoss != sl)
                    if (!sl.Equals(0.0))
                        Trade.ModifyPosition(position, sl, position.TakeProfit);
                    else if (tp.Equals(0.0) && sl.Equals(0.0))
                        Trade.ModifyPosition(position, null, position.TakeProfit);
            }

 


@fzlogic

fzlogic
02 Oct 2013, 17:14

You were probably logged in with different accounts. 


@fzlogic

fzlogic
23 Sep 2013, 09:36

Use an if statement to check if the SL/TP values of the position in reference are the new or the old.


@fzlogic

fzlogic
12 Sep 2013, 16:05 ( Updated at: 21 Dec 2023, 09:20 )

RE:

Cerunnos said:

Hi, I'm using in my robot the Heiken Ashi Indicator and would like to determine the color (blue or red) of the current candlestick. How can I do that? Thanks

 

        protected override void OnBar()
        {
            // Put your core logic here
            var index = heiken.closeha.Count - 1;
            if (heiken.closeha[index] > heiken.openha[index])
                Print("green");
            else
                Print("red");
        }

I think that for the last bar it may not produce correct results. Notice in the screenshot how there is both colors in certain candles.


@fzlogic

fzlogic
24 Jul 2013, 17:09

RE: RE:
breakermind said:
cAlgo_Fanatic said:

What do you want OpenPrice to be set to? Most probably you are assigning a NaN value to it if the indexing is not right. This could result if lastIndex is smaller than backBars.

You may use Print statements throughout the code, to output the values assigned to variables that are used in the conditions that open/close trades, for instance. This way, you can identify what could be wrong.

Please be advised that the drawing of lines, has not been implemented for backtesting. 


I would like to OpenPrice contain the value "Open" the first bar of the day (week).
Or simply how to get the value of the first bar of the Monday (Open High Low)  when i start script on second day of week?

I use Print but sometimes shows some strange messages.

 

 

        protected override void OnBar()
        {
            // Get the open price of the FirstBar of the week
            DateTime firstBar;
            
            if (!isFirstBarInitialized && MarketSeries.OpenTime.LastValue.DayOfWeek == DayOfWeek.Monday)
            {
                firstBar = MarketSeries.OpenTime.LastValue.Date; // get the date only part which will default to midnight time => first bar of monday
                if (MarketSeries.OpenTime.LastValue == firstBar)
                {
                    OpenPrice = MarketSeries.Open.LastValue;                    
                    
                    isFirstBarInitialized = true;
                }
            }
            else if (MarketSeries.OpenTime.LastValue.DayOfWeek != DayOfWeek.Monday)
                isFirstBarInitialized = false;
            
            // the rest of your code




@fzlogic

fzlogic
19 Jul 2013, 12:12

You can attach the Visual Studio debugger:

/forum/cbot-support/831


@fzlogic

fzlogic
05 Jul 2013, 14:24

RE: RE: RE:
vanzue said:
fzlogic said:
airlangga88 said:

i download news robot on cTDN, but they dosnt work.. am i wrong in settings?

what settings do you use? Set News Hour to UTC time.

 

whether your trading news robot going well?

I'm still working on it on a demo account. Yours?

airlangga88, I don't know why yours doesn't work... maybe put a print statement to see the server time when you start the robot and troubleshoot it like that.


@fzlogic

fzlogic
05 Jul 2013, 14:13

Hi, which button are you refering to? 


@fzlogic

fzlogic
05 Jul 2013, 11:09

RE:
airlangga88 said:

i download news robot on cTDN, but they dosnt work.. am i wrong in settings?

what settings do you use? Set News Hour to UTC time.

 


@fzlogic

fzlogic
02 Jul 2013, 15:36

I don't think angles are possible to be plotted via the API. There a similar post  /forum/ctrader-support/929


@fzlogic

fzlogic
02 Jul 2013, 15:31

You can try something like ultrasurf.


@fzlogic

fzlogic
21 Jun 2013, 18:03

Why don't you post the robot in the robots section so that we can fix/modify  it. Also add as much of the trading strategy logic as possible.


@fzlogic