SmartQuant Discussion

Automated Quantitative Strategy Development, SmartQuant Product Discussion and Technical Support Forums
It is currently Fri Apr 10, 2020 9:04 pm

All times are UTC + 3 hours




Post new topic Reply to topic  [ 25 posts ]  Go to page 1, 2  Next
Author Message
PostPosted: Sat Jul 07, 2007 2:53 am 
Offline

Joined: Sun May 20, 2007 9:09 am
Posts: 351
This strategy is only buy-long. Applicable for up trend market.
When price goes down, the buy-long breakout price will be adjusted lower.
When loss, the next lot size is increased according to 1,1,2,3,5,8,13...
SL=Range, TP=2xRange.

In the down trend market, Sliding-Up/Selling-Short Breakout should be used. Or maybe better if you have two accounts, one buying-long, one-selling-short.

I think it can be further improved. Any suggestion is welcome.

Code:
using System;
using System.Drawing;

using OpenQuant.API;
using OpenQuant.API.Indicators;


public class MyStrategy : Strategy
{   

   [Parameter("Range(pip)")]
   public double Range;

   [Parameter("Qty")]
   public int Qty = 25000;
   
   public double High = 0;

   public double Low = 0;
   
   [Parameter("Close positions on strategy stop")]
   public bool CloseOnStop = true;
   
   private double delta = 0;
   
   private int ocaCount = 0;   
   
   private int n = 1;
   
   private int n1 = 1;
   
   private int n0 = 0;

   private double PortfolioValue0 = 0;   
   
   private bool started;
   private bool newlow;
   
   private int barcount = 0;
   private double barclose = 0;
   private double barlow = 0;
   private double barhigh = 0;
   private double barlowest = 999999;

   private double minTick = 0.0001;
   private double tickSize = 0.0001;
   private int decimals = 4;    
   private bool getDecimals = false;
   
   Order order1;
   Order limitOrder;
   Order stopOrder;
   
   private double Value = 0;
   private double PnL = 0;
   private double NetPnL = 0;
   private double Debt = 0;
   private double CashFlow = 0;
   private double NetCashFlow = 0;
      
      
   
   public override void OnStrategyStart()
   {
      getDecimals = int.TryParse(Instrument.PriceFormat.Substring(1,1), out decimals);
      if (getDecimals)
      {
         tickSize = 1.0/Math.Pow(10,decimals);
         if (Instrument.TickSize != 0)
            tickSize *= Instrument.TickSize;
         minTick = tickSize;
      }
      
      PortfolioValue0 = Portfolio.GetValue();
      Console.WriteLine("{0}, {1}",   Instrument, PortfolioValue0);         
      
      started = false;
      newlow = false;

   }
   
   public override void OnStrategyStop()
   {
      if (CloseOnStop)
      {
         if (HasPosition)
         {
            if (Position.Side == PositionSide.Long)
               MarketOrder(OrderSide.Sell, Position.Qty).Send();
            else
               MarketOrder(OrderSide.Buy, Position.Qty).Send();
         }
         
         if (order1 != null)
         {
            order1.Cancel();
         }         
         
         if (limitOrder != null)
         {
            limitOrder.Cancel();
         }
      }
   }

   public override void OnBar(Bar bar)
   {
      barcount ++;
      barclose = bar.Close;
      barhigh = bar.High;
      barlow = bar.Low;
      
      if (barcount > 1)
      {
         if ((barlow + 0.0001) < barlowest)
         {
            barlowest = barlow;
            newlow = true;
         }
      }
      
      if (HasPosition)
      {
         PortfolioValue0 = Portfolio.GetValue();
         Value =  Position.GetValue();
         PnL = Position.GetPnL();
         NetPnL = Position.GetNetPnL();
         Debt = Position.GetDebtValue();
         CashFlow = Position.GetCashFlow();
         NetCashFlow = Position.GetNetCashFlow();
//         Console.WriteLine("{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}",   Instrument, n, Value,  PnL, NetPnL, Debt, CashFlow, NetCashFlow, PortfolioValue0);         
      }
      
      if (!HasPosition && (barcount > 5))
      {

         if (!started)
         {
            started = true;         

            if ((barclose >= High))
            {   
               n = 1;
               n1 = 1;
            }
            else
            {
               n0 = n;
               n = n+n1;
               n1 = n0;
            }            
            
            Low = barhigh;
            High = Low + Range;
            delta = 2*Range;
            barlowest = barlow;
            
            Low = Math.Round(Low/minTick) * minTick;
            High = Math.Round(High/minTick) * minTick;
            delta = Math.Round(delta/minTick) * minTick;      
            
            order1 = StopOrder(OrderSide.Buy,  Qty*(n), High);
            order1.Send();
         }
         else
         {   if (newlow)
            {
               newlow = false;
               Low = barlowest;
               High = Low + Range;
               delta = 2*Range;            
               
               Low = Math.Round(Low/minTick) * minTick;
               High = Math.Round(High/minTick) * minTick;
               delta = Math.Round(delta/minTick) * minTick;                        
               
               Console.WriteLine("{0}, barlowest = {1}",   Instrument, barlowest);
               if (order1 != null)
               {
                  order1.Cancel();
               }
               order1 = StopOrder(OrderSide.Buy,  Qty*(n), High);
               order1.Send();
            }
         }
      }
   }
   
   public override void OnPositionChanged()
   {
      if (HasPosition)
      {         
         ocaCount++;
         
         limitOrder = LimitOrder(OrderSide.Sell, Position.Qty, High + delta);
         stopOrder  = StopOrder (OrderSide.Sell, Position.Qty, Low);
         string id  = Clock.Now.Ticks.ToString();
            
         limitOrder.OCAGroup = id  + ": " +  Instrument.Symbol + " " + ocaCount;
         stopOrder.OCAGroup  = id  + ": " +  Instrument.Symbol + " " + ocaCount;
         
         limitOrder.Send();
         stopOrder.Send();   
         
      }   
      else
      { 
         started = false;            
      }
   }
}


Image
Image
Image


Top
 Profile  
 
 Post subject:
PostPosted: Sun Jul 08, 2007 7:23 am 
Offline

Joined: Sun May 20, 2007 9:09 am
Posts: 351
The following new version can be used for Long or Short.

Image

Code:
using System;
using System.Drawing;

using OpenQuant.API;
using OpenQuant.API.Indicators;


public class MyStrategy : Strategy
{   

   private double Range;

   private int Qty = 1;
   
   private double High = 0;

   private double Low = 0;
   
   private int longshort = 1;        // 1 is long, 0 is short

   private bool CloseOnStop = true;
   
   private double delta = 0;
   
   private int ocaCount = 0;   
   
   private int n = 1;
   
   private int n1 = 0;
   
   private int n0 = 0;

   private double PortfolioValue0 = 0;   
   
   private bool started = false;
   private bool newlow = false;
   private bool newhigh = false;
   
   private int barcount = 0;
   private double barclose = 0;
   private double barlow = 0;
   private double barhigh = 0;
   private double barlowest = 999999.0;
   private double barhighest = 0.0;
   
   private double tickSize = 0.0001;
   private int decimals = 0;    
   private bool getDecimals = false;
   
   Order order1;
   Order limitOrder;
   Order stopOrder;
   
   private double Value = 0;
   private double PnL = 0;
   private double NetPnL = 0;
   private double Debt = 0;
   private double CashFlow = 0;
   private double NetCashFlow = 0;
      
      
   
   public override void OnStrategyStart()
   {
      if (Instrument.TickSize != 0)
         tickSize = Instrument.TickSize;
      
      getDecimals = int.TryParse(Instrument.Description.Substring(0,1), out decimals);
      if (getDecimals)
      {
         longshort = decimals;      // 1 is long, 0 is short
      }
      
      getDecimals = int.TryParse(Instrument.Description.Substring(2,2), out decimals);
      if (getDecimals)
      {
         Range = tickSize*decimals;     
      }      
      
      getDecimals = int.TryParse(Instrument.Description.Substring(5,5), out decimals);
      if (getDecimals)
      {
         Qty = decimals;     
      }      
      
      PortfolioValue0 = Portfolio.GetValue();
      Console.WriteLine("{0}, {1}",   Instrument, PortfolioValue0);         
      
      started = false;
      newlow = false;

   }
   
   public override void OnStrategyStop()
   {
      if (CloseOnStop)
      {
         if (HasPosition)
         {
            if (Position.Side == PositionSide.Long)
               MarketOrder(OrderSide.Sell, Position.Qty).Send();
            else
               MarketOrder(OrderSide.Buy, Position.Qty).Send();
         }
         
         if (order1 != null)
         {
            order1.Cancel();
         }         
         
         if (limitOrder != null)
         {
            limitOrder.Cancel();
         }
      }
   }

   public override void OnBar(Bar bar)
   {
      barcount ++;
      barclose = bar.Close;
      barhigh = bar.High;
      barlow = bar.Low;
      
      if (barcount > 1)
      {
         if ((barlow + tickSize) < barlowest)
         {
            barlowest = barlow;
            newlow = true;
         }
         
         if ((barlow + tickSize) > barhighest)
         {
            barhighest = barhigh;
            newhigh = true;
         }         
      }
      
      if (HasPosition)
      {
         PortfolioValue0 = Portfolio.GetValue();
         Value =  Position.GetValue();
         PnL = Position.GetPnL();
         NetPnL = Position.GetNetPnL();
         Debt = Position.GetDebtValue();
         CashFlow = Position.GetCashFlow();
         NetCashFlow = Position.GetNetCashFlow();
//         Console.WriteLine("{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}",   Instrument, n, Value,  PnL, NetPnL, Debt, CashFlow, NetCashFlow, PortfolioValue0);         
      }
      
      if (!HasPosition && (barcount > 5))
      {

         if (!started)
         {
            started = true;         

            if ((PnL >= 0))     //previous trade taken profit, start from 1
            {   
               n = 1;
               n1 = 0;
            }
            else
            {
               n0 = n;
               n = n+n1;
               n1 = n0;
            }            
            
            if (longshort == 1)
            {
               Low = barhigh;
               High = Low + Range;
            }
            else
            {
               High = barlow;
               Low = High - Range;   
            }
            
            delta = 2*Range;
            barlowest = barlow;
            barhighest = barhigh;
            
            Low = Math.Round(Low/tickSize) * tickSize;
            High = Math.Round(High/tickSize) * tickSize;
            delta = Math.Round(delta/tickSize) * tickSize;      
            
            if (longshort == 1)
              order1 = StopOrder(OrderSide.Buy,  Qty*(n), High);
            else
               order1 = StopOrder(OrderSide.Sell,  Qty*(n), Low);
            order1.Send();
         }
         else
         {   if ((longshort == 1) && newlow)
            {
               newlow = false;
               Low = barlowest;
               High = Low + Range;
               delta = 2*Range;            
               
               Low = Math.Round(Low/tickSize) * tickSize;
               High = Math.Round(High/tickSize) * tickSize;
               delta = Math.Round(delta/tickSize) * tickSize;                        
               
               Console.WriteLine("{0}, barlowest = {1}",   Instrument, barlowest);
               if (order1 != null)
               {
                  order1.Cancel();
               }
               order1 = StopOrder(OrderSide.Buy,  Qty*(n), High);
               order1.Send();
            }
            
            if ((longshort == 0) && newhigh)
            {
               newhigh = false;
               High = barhighest;
               Low = High - Range;
               delta = 2*Range;            
               
               Low = Math.Round(Low/tickSize) * tickSize;
               High = Math.Round(High/tickSize) * tickSize;
               delta = Math.Round(delta/tickSize) * tickSize;                        
               
               Console.WriteLine("{0}, barhighest = {1}",   Instrument, barhighest);
               if (order1 != null)
               {
                  order1.Cancel();
               }
               order1 = StopOrder(OrderSide.Sell,  Qty*(n), Low);
               order1.Send();
            }            
            
            
         }
      }
   }
   
   public override void OnPositionChanged()
   {
      if (HasPosition)
      {         
         if (longshort == 1)
         {
            limitOrder = LimitOrder(OrderSide.Sell, Position.Qty, High + delta);
            stopOrder  = StopOrder (OrderSide.Sell, Position.Qty, Low);
         }
         else
         {
            stopOrder  = StopOrder (OrderSide.Buy, Position.Qty, High);                        
            limitOrder = LimitOrder(OrderSide.Buy, Position.Qty, Low - delta);
         }
         
         ocaCount++;
         string id  = Clock.Now.Ticks.ToString();         
         limitOrder.OCAGroup = id  + ": " +  Instrument.Symbol + " " + ocaCount;
         stopOrder.OCAGroup  = id  + ": " +  Instrument.Symbol + " " + ocaCount;
         
         limitOrder.Send();
         stopOrder.Send();   
         
      }   
      else
      { 
         started = false;            
      }
   }
}


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jul 11, 2007 3:08 pm 
Offline

Joined: Sun May 20, 2007 9:09 am
Posts: 351
I modify the code to include ticksize adjustment for K200 options. The ticksize is 0.01 for price < 3.0. The ticksize is 0.05 when price >= 3.0. However, my strategy will do the adjustment when price >= 2.70.

Code:
using System;
using System.Drawing;

using OpenQuant.API;
using OpenQuant.API.Indicators;


public class MyStrategy : Strategy
{   

   private double Range;

   private int Qty = 1;
   
   private double High = 0;

   private double Low = 0;
   
   private int longshort = 1;        // 1 is long, 0 is short

   private bool CloseOnStop = true;
   
   private double delta = 0;
   
   private int ocaCount = 0;   
   
   private int n = 1;
   
   private int n1 = 0;
   
   private int n0 = 0;

   private double PortfolioValue0 = 0;   
   
   private bool started = false;
   private bool newlow = false;
   private bool newhigh = false;
   
   private int barcount = 0;
   private double barclose = 0;
   private double barlow = 0;
   private double barhigh = 0;
   private double barlowest = 999999.0;
   private double barhighest = 0.0;
   
   private double tickSize = 0.0001;
   private int longshortdecimals = 1;
   private int rangedecimals = 5;
   private int qtydecimals = 1;
   private bool getDecimals = false;
   
   Order order1;
   Order limitOrder;
   Order stopOrder;
   
   private double Value = 0;
   private double PnL = 0;
   private double NetPnL = 0;
   private double Debt = 0;
   private double CashFlow = 0;
   private double NetCashFlow = 0;
      
      
   
   public override void OnStrategyStart()
   {
      if (Instrument.TickSize != 0)
         tickSize = Instrument.TickSize;
      
      getDecimals = int.TryParse(Instrument.Description.Substring(0,1), out longshortdecimals);
      if (getDecimals)
      {
         longshort = longshortdecimals;      // 1 is long, 0 is short
      }
      
      getDecimals = int.TryParse(Instrument.Description.Substring(2,2), out rangedecimals);
      if (getDecimals)
      {
         Range = tickSize*rangedecimals;     
      }      
      
      getDecimals = int.TryParse(Instrument.Description.Substring(5,5), out qtydecimals);
      if (getDecimals)
      {
         Qty = qtydecimals;     
      }      
      
      PortfolioValue0 = Portfolio.GetValue();
      Console.WriteLine("{0}, {1}",   Instrument, PortfolioValue0);         
      
      started = false;
      newlow = false;

   }
   
   public override void OnStrategyStop()
   {
      if (CloseOnStop)
      {
         if (HasPosition)
         {
            if (Position.Side == PositionSide.Long)
               MarketOrder(OrderSide.Sell, Position.Qty).Send();
            if (Position.Side == PositionSide.Short)
               MarketOrder(OrderSide.Buy, Position.Qty).Send();
         }
         
         if (order1 != null)
         {
            order1.Cancel();
         }         
         
         if (limitOrder != null)
         {
            limitOrder.Cancel();
         }
         
         if (stopOrder != null)
         {
            stopOrder.Cancel();
         }         
         
         
      }
   }

   public override void OnBar(Bar bar)
   {
      DataManager.Add(Instrument, bar);
      barcount ++;
      barclose = bar.Close;
      barhigh = bar.High;
      barlow = bar.Low;
      
      if (barcount > 1)
      {
         if ((barlow + tickSize) < barlowest)
         {
            barlowest = barlow;
            newlow = true;
         }
         
         if ((barlow + tickSize) > barhighest)
         {
            barhighest = barhigh;
            newhigh = true;
         }         
      }
      
      if (HasPosition)
      {
         PortfolioValue0 = Portfolio.GetValue();
         Value =  Position.GetValue();
         PnL = Position.GetPnL();
         NetPnL = Position.GetNetPnL();
         Debt = Position.GetDebtValue();
         CashFlow = Position.GetCashFlow();
         NetCashFlow = Position.GetNetCashFlow();
         //         Console.WriteLine("{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}",   Instrument, n, Value,  PnL, NetPnL, Debt, CashFlow, NetCashFlow, PortfolioValue0);         
      }
      
      if (!HasPosition && (barcount > 5))
      {

         if (!started)
         {
            started = true;         

            if (PnL >= 0)     //previous trade taken profit, start from 1
            {   
               n = 1;
               n1 = 0;
               
               if (Instrument.Currency == "KRW")
               {
                  Console.WriteLine("{0}, Currency = {1}",   Instrument, Instrument.Currency );
                  
                  if (barhigh >= 2.70)
                  {
                     tickSize = 0.05;
                  }
                  else
                  {
                     tickSize = 0.01;
                  }      
                  Range = tickSize*rangedecimals;
                  Range = Math.Round(Range/tickSize) * tickSize;
               }               
            }
            else
            {
               n0 = n;
               n = n+n1;
               n1 = n0;
            }            
            
            if (longshort == 1)
            {         
               Low = barhigh;
               Low = Math.Round(Low/tickSize) * tickSize;
               High = Low + Range;
               High = Math.Round(High/tickSize) * tickSize;
            }
            else
            {
               High = barlow;
               High = Math.Round(High/tickSize) * tickSize;            
               Low = High - Range;   
               Low = Math.Round(Low/tickSize) * tickSize;            
            }
                        
            
            delta = 2*Range;
            barlowest = barlow;
            barhighest = barhigh;

            Low = Math.Round(Low/tickSize) * tickSize;
            High = Math.Round(High/tickSize) * tickSize;
            delta = Math.Round(delta/tickSize) * tickSize;      
            
            if (longshort == 1)
               order1 = StopOrder(OrderSide.Buy,  Qty*(n), High);
            if (longshort == 0)
               order1 = StopOrder(OrderSide.Sell,  Qty*(n), Low);
            order1.Send();
         }
         else
         {   
               
            if ((longshort == 1) && newlow)
            {
               
               if ((n0 == 0) && (Instrument.Currency == "KRW"))
               {
                  Console.WriteLine("{0}, Currency = {1}",   Instrument, Instrument.Currency );
                  
                  if (barhigh >= 2.70)
                  {
                     tickSize = 0.05;
                  }
                  else
                  {
                     tickSize = 0.01;
                  }      
                  Range = tickSize*rangedecimals;
                  Range = Math.Round(Range/tickSize) * tickSize;
               }                                          
               
               newlow = false;
               Low = barlowest;
               Low = Math.Round(Low/tickSize) * tickSize;      
               Range = tickSize*rangedecimals;            
               Range = Math.Round(Range/tickSize) * tickSize;      
               High = Low + Range;
               High = Math.Round(High/tickSize) * tickSize;               
               delta = 2*Range;            
               delta = Math.Round(delta/tickSize) * tickSize;                        
               
               Console.WriteLine("{0}, barlowest = {1}",   Instrument, barlowest);
               if (order1 != null)
               {
                  order1.Cancel();
               }
               order1 = StopOrder(OrderSide.Buy,  Qty*(n), High);
               order1.Send();
            }
            
            if ((longshort == 0) && newhigh)
            {
               
               if ((Instrument.Currency == "KRW"))
               {
                  Console.WriteLine("{0}, Currency = {1}",   Instrument, Instrument.Currency );
                  
                  if (barhigh >= 2.70)
                  {
                     tickSize = 0.05;
                  }

                  Range = tickSize*rangedecimals;
                  Range = Math.Round(Range/tickSize) * tickSize;
               }                                                         
               
               newhigh = false;
               High = barhighest;            
               High = Math.Round(High/tickSize) * tickSize;
               Range = tickSize*rangedecimals;            
               Range = Math.Round(Range/tickSize) * tickSize;                     
               Low = High - Range;
               Low = Math.Round(Low/tickSize) * tickSize;               
               delta = 2*Range;            
               delta = Math.Round(delta/tickSize) * tickSize;                        
               
               Console.WriteLine("{0}, barhighest = {1}",   Instrument, barhighest);
               if (order1 != null)
               {
                  order1.Cancel();
               }
               order1 = StopOrder(OrderSide.Sell,  Qty*(n), Low);
               order1.Send();
            }            
            
            
         }
      }
   }
   
   public override void OnPositionChanged()
   {
      if (HasPosition)
      {         
         if (longshort == 1)
         {
            limitOrder = LimitOrder(OrderSide.Sell, Position.Qty, High + delta);
            stopOrder  = StopOrder (OrderSide.Sell, Position.Qty, Low);
         }
         else
         {
            stopOrder  = StopOrder (OrderSide.Buy, Position.Qty, High);                        
            limitOrder = LimitOrder(OrderSide.Buy, Position.Qty, Low - delta);
         }
         
         ocaCount++;
         string id  = Clock.Now.Ticks.ToString();         
         limitOrder.OCAGroup = id  + ": " +  Instrument.Symbol + " " + ocaCount;
         stopOrder.OCAGroup  = id  + ": " +  Instrument.Symbol + " " + ocaCount;
         
         limitOrder.Send();
         stopOrder.Send();   
         
      }   
      else
      { 
         started = false;            
      }
   }
}




Top
 Profile  
 
 Post subject:
PostPosted: Thu Jul 12, 2007 3:31 pm 
Offline

Joined: Sun May 20, 2007 9:09 am
Posts: 351
some results

Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jul 12, 2007 3:58 pm 
Offline

Joined: Tue Aug 05, 2003 3:43 pm
Posts: 6817
What about PnL / equity graphs? :wink:


Top
 Profile  
 
 Post subject:
PostPosted: Sun Jul 15, 2007 1:29 pm 
Offline

Joined: Sun May 20, 2007 9:09 am
Posts: 351
Last Week Performance.

Image


Top
 Profile  
 
 Post subject:
PostPosted: Sun Jul 15, 2007 6:15 pm 
Offline

Joined: Tue Aug 05, 2003 3:43 pm
Posts: 6817
Cool !

Is this simulated or paper trading (or real cash :wink: )? Also, what about transaction costs?

Very impressive anyway.

Regards,
Anton


Top
 Profile  
 
 Post subject:
PostPosted: Mon Jul 16, 2007 4:50 am 
Offline

Joined: Sun May 20, 2007 9:09 am
Posts: 351
I used the last week live data collected and run the simulation using the same live trading program on just two instruments GBPUSD and EURUSD.

Transaction cost is excluded in the simulation.

I am still not satisfied with too large the lot size. May be someone can suggest improvement to reduce it.


Top
 Profile  
 
 Post subject:
PostPosted: Sat Jul 28, 2007 5:52 am 
Offline

Joined: Sun May 20, 2007 9:09 am
Posts: 351
3 weeks performance :D
There are total 858 trades.

Image


Top
 Profile  
 
 Post subject:
PostPosted: Sun Aug 05, 2007 4:24 am 
Offline

Joined: Sun May 20, 2007 9:09 am
Posts: 351
4 Weeks Performance
There was data connectivity broken during 1 Aug.

Image
Image
Image


Top
 Profile  
 
 Post subject:
PostPosted: Sat Aug 11, 2007 3:09 am 
Offline

Joined: Sun May 20, 2007 9:09 am
Posts: 351
5 weeks performance.
Using Interactivebrokers:
GBP/USD 1 lot size = 15000
EUR/USD 1 lot size = 20000

Image

The last week "Dip" is caused by the following down trend.
Such down trend can be easily filter off?


Image


Top
 Profile  
 
 Post subject:
PostPosted: Sat Mar 29, 2008 2:42 pm 
Offline

Joined: Thu Jan 31, 2008 11:39 am
Posts: 166
Hi Tickjob,

it would be very nice to post a link to a quick description of this strategy, cause going through the code does not make me smarter :-)


Top
 Profile  
 
 Post subject:
PostPosted: Mon Mar 31, 2008 3:03 pm 
Offline

Joined: Sun May 20, 2007 9:09 am
Posts: 351
It is very simple, the whole concept already describe at the top, I repeat here. The code of course not so easy to understand. You can program your own version.
---------------------------------------------------------------------------
This strategy is only buy-long. Applicable for up trend market.
When price goes down, the buy-long breakout price will be adjusted lower.
When loss, the next lot size is increased according to 1,1,2,3,5,8,13...
SL=Range, TP=2xRange.

In the down trend market, Sliding-Up/Selling-Short Breakout should be used. Or maybe better if you have two accounts, one buying-long, one-selling-short.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Mar 31, 2008 4:32 pm 
Offline

Joined: Thu Jan 31, 2008 11:39 am
Posts: 166
Thx Tickjob. It looks quite similar to your other channel break out strategy, which also uses the increasing of lot sizes - as I already said, I think this can be dangerous...


Top
 Profile  
 
 Post subject:
PostPosted: Mon Mar 31, 2008 6:42 pm 
Offline

Joined: Thu Jan 31, 2008 11:39 am
Posts: 166
Hm I tried your strategy with EURUSD. Sometimes the strategy does not increase the qty - why?


Attachments:
File comment: ec
hm.JPG
hm.JPG [ 272.92 KiB | Viewed 12892 times ]
Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 25 posts ]  Go to page 1, 2  Next

All times are UTC + 3 hours


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group