Neo traderBot

Neo traderBot

Você sabia?

Um backtesting adequado deve buscar simular situações práticas do mercado (slippage, custo de operação, etc...)

leaf leftleaf right
Notifications
Clear all

[Solucionado] Como aumentar a posição cada vez que uma condição ocorra.

3 Posts
1 Usuários
0 Reactions
226 Visualizações
Credson
(@m4tr1xbr)
Membro Moderator
Registrou: 2 anos atrás
Posts: 45
Iniciador do tópico  

Não estou conseguindo fazer o aumento de posição quando a condição é satisfeita.

EntriesPerDirection							= 3;
EntryHandling								= EntryHandling.AllEntries;

 

if (
	 // ShortCondition
	((Close[1] > Bollinger1.Upper[1]) && (Close[0] < Bollinger1.Upper[0])))
	{
		EnterShort(Convert.ToInt32(DefaultQuantity), @"Short");
	}

 


   
Citar
Credson
(@m4tr1xbr)
Membro Moderator
Registrou: 2 anos atrás
Posts: 45
Iniciador do tópico  

Vou postar o script completo:

	public class BateForaVer1 : Strategy
	{
		private Bollinger Bollinger1;
        double LongTakeProfit;
        double ShortTakeProfit;

        protected override void OnStateChange()
		{
			if (State == State.SetDefaults)
			{
				Description									= @"Enter the description for your new custom Strategy here.";
				Name										= "BateForaVer1";
				Calculate									= Calculate.OnPriceChange;
				EntriesPerDirection							= 3;
				EntryHandling								= EntryHandling.AllEntries;
				IsExitOnSessionCloseStrategy				= true;
				ExitOnSessionCloseSeconds					= 30;
				IsFillLimitOnTouch							= false;
				MaximumBarsLookBack							= MaximumBarsLookBack.TwoHundredFiftySix;
				OrderFillResolution							= OrderFillResolution.Standard;
				Slippage									= 0;
				StartBehavior								= StartBehavior.WaitUntilFlat;
				TimeInForce									= TimeInForce.Gtc;
				TraceOrders									= false;
				RealtimeErrorHandling						= RealtimeErrorHandling.StopCancelClose;
				StopTargetHandling							= StopTargetHandling.PerEntryExecution;
				BarsRequiredToTrade							= 20;
				// Disable this property for performance gains in Strategy Analyzer optimizations
				// See the Help Guide for additional information
				IsInstantiatedOnEachOptimizationIteration	= true;
				int BollingerLenght					= 20;
			}
			else if (State == State.Configure)
			{
			}
			else if (State == State.DataLoaded)
			{				
				Bollinger1				= Bollinger(Close, 2, Convert.ToInt32(BollingerLenght));
				
				Bollinger1.Plots[0].Brush = Brushes.IndianRed;
				Bollinger1.Plots[1].Brush = Brushes.Goldenrod;
				Bollinger1.Plots[2].Brush = Brushes.AliceBlue;
				
				AddChartIndicator(Bollinger1);
				
				
			}
		}

		protected override void OnBarUpdate()
		{
			if (BarsInProgress != 0) 
				return;

			if (CurrentBars[0] < 1)
				return;

			 // Set 1
			if (
				 // ShortCondition
				((Close[1] > Bollinger1.Upper[1])
				 && (Close[0] < Bollinger1.Upper[0])))
			{
				EnterShort(Convert.ToInt32(DefaultQuantity), @"Short");
			}
			
			SetProfitTarget(@"Short",CalculationMode.Price, Bollinger1.Middle[0]);
			SetProfitTarget(@"Long",CalculationMode.Price, Bollinger1.Middle[0]);
			
			if (Position.MarketPosition == MarketPosition.Short) ;
			{
			
				

				if (Close[0] <= ShortTakeProfit) ;
				{
					ExitShort(@"Short");
				}
			}

			 // Set 2
			if (
				 // LongCondition
				((Close[1] < Bollinger1.Lower[1]) && (Close[0] > Bollinger1.Lower[0])))
			{
				EnterLong(Convert.ToInt32(DefaultQuantity), @"Long");
			}
			if (Position.MarketPosition == MarketPosition.Long) ;
			{
				

				if (Close[0] >=LongTakeProfit)
				{
					ExitLong(@"Long");
				}
			}
		}

	

	}

 


   
ReplyCitar
Credson
(@m4tr1xbr)
Membro Moderator
Registrou: 2 anos atrás
Posts: 45
Iniciador do tópico  

Acabei descobrindo o problema, na vdd o script está correto, o problema é que na hora de inserir a estratégia no gráfico eu não percebi que estava configurado para atualizar a cada mudança de preço.

Sendo que no caso da minha estratégia de estudo era para atualizar somente no fechamento da barra. 

Basicamente foi só alterar as entradas abaixo e configurar para executar no fechamento da barra.

// Example #1
// Irá permitir o aumento de posição até a quantidade definida.
protected override void Initialize()
{
    EntriesPerDirection = 5; //Quantidade de aumento permitido
    EntryHandling = EntryHandling.AllEntries; //irá permitir o aumento cada vez que a condição ocorrer até 5 entradas.
}

 

protected override void OnBarUpdate()
{
    //Condição para aumento de posição 
    if (CrossAbove(SMA(10), SMA(20), 1)
         EnterLong("SMA Cross Entry");
}

 Fonte: NinjaTrader Version 7

 

This post was modified 2 anos atrás by Credson

   
ReplyCitar