Not able to increase the volume by the amount by some factor

Created at 06 Jan 2023, 17:55
How’s your experience with the cTrader Platform?
Your feedback is crucial to cTrader's development. Please take a few seconds to share your opinion and help us improve your trading experience. Thanks!
AS

ashish.sah.np

Joined 19.12.2022

Not able to increase the volume by the amount by some factor
06 Jan 2023, 17:55


I'm trying to multiply the Volume for next trade by dividing the factor obtained by ratio of last net loss and a user defined value. But it doesn't seem to increase the volume it just uses the _mult value as 1 always. Can someone provide me the alternative code or any solution. 
 

[Parameter("Average Trade Price (amt)", Group = "Volume", DefaultValue = 2, MinValue = 0.01, Step = 0.01)]
public double Invest {get;set;}

[Parameter("Quantity (Lots)", Group = "Volume", DefaultValue = 0.01, MinValue = 0.01, Step = 0.01)]
public double Quantity {get;set;}


private double _mult=1;


protected override void OnStart() 
    {
        Positions.Closed += OnPositionsClosed;
    }

private void OnPositionsClosed(PositionClosedEventArgs args)
    {
         var position = args.Position;
         if (position.NetProfit < 0) 
            {
                _mult = Math.Abs((position.NetProfit)/Invest);
            }
         else
            {
                _mult = 1;
            } 
    }


protected override void OnTick() 
{
         var volumeInUnits = (Symbol.QuantityToVolumeInUnits(Math.Round((Quantity*_mult), 2, 
         MidpointRounding.AwayFromZero)));

         ExecuteMarketOrder(TradeType.Buy, SymbolName, volumeInUnits, "Long",SL,TP);
}

 


@ashish.sah.np
Replies

firemyst
09 Jan 2023, 03:47

RE:

ashish.sah.np said:

I'm trying to multiply the Volume for next trade by dividing the factor obtained by ratio of last net loss and a user defined value. But it doesn't seem to increase the volume it just uses the _mult value as 1 always. Can someone provide me the alternative code or any solution. 
 

[Parameter("Average Trade Price (amt)", Group = "Volume", DefaultValue = 2, MinValue = 0.01, Step = 0.01)]
public double Invest {get;set;}

[Parameter("Quantity (Lots)", Group = "Volume", DefaultValue = 0.01, MinValue = 0.01, Step = 0.01)]
public double Quantity {get;set;}


private double _mult=1;


protected override void OnStart() 
    {
        Positions.Closed += OnPositionsClosed;
    }

private void OnPositionsClosed(PositionClosedEventArgs args)
    {
         var position = args.Position;
         if (position.NetProfit < 0) 
            {
                _mult = Math.Abs((position.NetProfit)/Invest);
            }
         else
            {
                _mult = 1;
            } 
    }


protected override void OnTick() 
{
         var volumeInUnits = (Symbol.QuantityToVolumeInUnits(Math.Round((Quantity*_mult), 2, 
         MidpointRounding.AwayFromZero)));

         ExecuteMarketOrder(TradeType.Buy, SymbolName, volumeInUnits, "Long",SL,TP);
}

 

First question: is

if (position.NetProfit < 0) 

ever true?

Eg, have any of the positions ever had a NetProfit in the code? If so, how do you know? I don't see any logging, and don't know if you've run it with VS to have a breakpoint there to see.


@firemyst