[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [amibroker] Re: Limiting Sell to Open Position in CBI



PureBytes Links

Trading Reference Links

Hello,

Or.... use FindOpenPos without loop - which is faster/easier:

openpos = bo.FindOpenPos( sig.Symbol );

Best regards,
Tomasz Janeczko
amibroker.com
----- Original Message ----- 
From: "gp_sydney" <gp.investment@xxxxxxxxx>
To: <amibroker@xxxxxxxxxxxxxxx>
Sent: Thursday, September 06, 2007 10:39 AM
Subject: [amibroker] Re: Limiting Sell to Open Position in CBI


> The way you're using the open position list is not correct. You need
> to match the open position symbol with the signal symbol to ensure
> you're referencing the same open position stock as the sell signal
> refers to. The way you have it now, as long as there is a single long
> position in the open position list, all sell signals will be printed.
> 
> Try changing the open position conditional statement to:
> 
> if(openpos.IsOpen AND openpos.IsLong AND openpos.Symbol == sig.Symbol)
> 
> You could also then put a "break" at the end of the following code, as
> once you have found a matching symbol you don't need to continue with
> the for loop.
> 
> And, you shouldn't need to check "IsOpen" when traversing the open
> position list. All trades in the open position list should be open.
> 
> Regards,
> GP
> 
> 
> --- In amibroker@xxxxxxxxxxxxxxx, "tipequity" <l3456@xxx> wrote:
>>
>> Below is a code I am playing with. The final objective is to have 
>> backtest report that keeps ledger of buys and sells similar to 
>> quicken. The buy side of the trades seems to work fine. On the sell 
>> side it is selling with no open position. How can I limit the sell to 
>> closing open positins. Many thanks in advance for you help and 
>> comments.
>> 
>> /*====================================================================
>> ==========
>> Global Settings
>> ======================================================================
>> ========*/
>> SetFormulaName("Testing a Creation of Trade Ledger"); /* name it for 
>> backtest report identification */
>> SetBarsRequired(1000000,0); /* this ensures that the charts include 
>> all bars AND NOT just those on screen */
>> SetOption("InitialEquity", 100000); /* starting capital */
>> SetOption("CommissionAmount",8); /* commissions AND cost */
>> SetOption("CommissionMode", 2); /* set commissions AND costs as $ per 
>> trade */
>> SetTradeDelays( 1, 1, 1, 1);
>> SetOption("PriceBoundChecking", 1); /* trade only within the chart 
>> bar's price range */
>> SetOption("UsePrevBarEquityForPosSizing", 1); /* set the use of last 
>> bars equity for trade size */
>> SetOption("AllowPositionShrinking", True);
>> SetOption("MinShares", 100);
>> SetOption("AccountMargin", 100); 
>> RoundLotSize = 1 ;
>> PositionSize = - 10; /* trade size will be 10% of available equity */
>> 
>> TradeDate = DateTime(); 
>> 
>> SetCustomBacktestProc(""); 
>> 
>> MaxBuys = 3; // Set no more than 4 buys per day
>> 
>> if( Status("action") == actionPortfolio )
>> { 
>> bo = GetBacktesterObject(); 
>> bo.PreProcess(); 
>>    for( i = 0; i < BarCount; i++ ) 
>> { 
>> Symbol = " ";
>> TransType = "";
>> Rank = 0;
>> Shares = 0;
>> TransAmount = 0;
>> Reason = 0;
>> Price = 0;
>> cntBuys = 0; 
>> Balance = bo.Equity;
>>     // look at new signals and exclude signals if they exceed maxBuys 
>> for( sig = bo.GetFirstSignal(i); sig; sig = 
>> bo.GetNextSignal(i) )
>> { 
>>     // check for entry signal
>> if( sig.IsEntry() ) 
>> { 
>> if( cntBuys > MaxBuys )
>> {   
>> sig.PosSize = 0; 
>> } 
>> else 
>> { 
>> cntBuys = cntBuys + 1;
>> Symbol = sig.Symbol;
>> TransType = "Buy";
>> Rank = sig.PosScore;
>> Shares = round((bo.Equity / -
>> sig.PosSize)/sig.Price);
>> Price = sig.Price;
>> TransAmount = Shares * Price;
>> Balance = Balance - 
>> TransAmount; 
>> Reason = sig.Reason;
>> 
>> 
>> bo.RawTextOutput(
>> 
>> Symbol +
>> 
>> "\t" + TransType +
>> 
>> "\t" + DateTimeToStr(TradeDate[ i ]) +
>> 
>> "\t" + Price +
>> 
>> "\t" + Rank +
>> 
>> "\t" + "Shares " + Shares +
>> 
>> "\t" + "Amount " + TransAmount +
>> 
>> "\t" + "Balance " + Balance +
>> 
>> "\t" + "Reason " + Reason 
>> 
>> );
>> } 
>> } 
>> else if (sig.IsExit() AND sig.Type == 2 )
>> {
>> // scan through open positions
>> for( openpos = bo.GetFirstOpenPos(); 
>> openpos; openpos = bo.GetNextOpenPos() ) { 
>> // check for entry signal and long 
>> signal 
>> if( openpos.IsOpen AND 
>> openpos.IsLong )
>> {
>> Symbol = sig.Symbol;
>> TransType = "Sell";
>> Rank = sig.PosScore;
>> Price = sig.Price;
>> TransAmount = Shares * Price;
>> Balance = Balance + 
>> TransAmount; 
>> Reason = sig.Reason;
>> 
>> bo.RawTextOutput(
>> 
>> Symbol +
>> 
>> "\t" + TransType +
>> 
>> "\t" + DateTimeToStr(TradeDate[ i ]) +
>> 
>> "\t" + Price +
>> 
>> "\t" + Rank +
>> 
>> "\t" + "Shares " + Shares +
>> 
>> "\t" + "Amount " + TransAmount +
>> 
>> "\t" + "Balance " + Balance +
>> 
>> "\t" + "Reason " + Reason 
>> 
>> );
>> }
>> }
>> }
>> } 
>>    bo.ProcessTradeSignals( i ); 
>> } 
>>    bo.PostProcess(); 
>> }
>> 
>> 
>> //fast = Optimize("fast", 12, 5, 20, 1 ); 
>> //slow = Optimize("slow", 26, 10, 25, 1 ); 
>> Buy=Cross(MACD(12,26),Signal(12,26)); 
>> Sell=Cross(Signal(12,26),MACD(12,26));
>>
> 
> 
> 
> 
> Please note that this group is for discussion between users only.
> 
> To get support from AmiBroker please send an e-mail directly to 
> SUPPORT {at} amibroker.com
> 
> For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
> http://www.amibroker.com/devlog/
> 
> For other support material please check also:
> http://www.amibroker.com/support.html
> 
> Yahoo! Groups Links
> 
> 
> 
> 
>


Please note that this group is for discussion between users only.

To get support from AmiBroker please send an e-mail directly to 
SUPPORT {at} amibroker.com

For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/

For other support material please check also:
http://www.amibroker.com/support.html
 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/amibroker/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/amibroker/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:amibroker-digest@xxxxxxxxxxxxxxx 
    mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx

<*> To unsubscribe from this group, send an email to:
    amibroker-unsubscribe@xxxxxxxxxxxxxxx

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/