设为首页收藏本站

 找回密码
 注册
查看: 3403|回复: 4
打印 上一主题 下一主题

A_CurrentEquity 函数问题 [复制链接]

Rank: 5Rank: 5

精华
0
UID
7099
积分
614
帖子
120
主题
22
阅读权限
60
注册时间
2010-3-3
最后登录
2019-3-24
跳转到指定楼层
1#
发表于 2010-8-5 12:49:54 |只看该作者 |倒序浏览
系统自带的海龟系统中
TotalEquity=CurrentCapital()+ Abs(CurrentContracts()*Close*ContractUnit()*BigPointValue()*MarginRatio());

是否等同于
TotalEquity = A_CurrentEquity;

谢谢

Rank: 5Rank: 5

精华
0
UID
7099
积分
614
帖子
120
主题
22
阅读权限
60
注册时间
2010-3-3
最后登录
2019-3-24
2#
发表于 2010-8-5 13:04:19 |只看该作者
本帖最后由 道勤 于 2010-8-5 13:10 编辑

我想把系统自带的海龟交易系统修改成用A_SendOrder发单的形式,请老大帮忙看看,这样改有没有问题。
Params
    Numeric RiskRatio(1);                 
    Numeric ATRLength(20);                  
    Numeric boLength(20);                  
    Numeric fsLength(55);                  
    Numeric teLength(10);                  
    Bool LastProfitableTradeFilter(True);   
        Numeric BFB(1);
        Numeric WaitTime(10);

Vars
        Numeric MinPoint;                       
    Numeric N;                             
    Numeric TotalEquity;                    
    Numeric TurtleUnits;                  
    NumericSeries DonchianHi;              
    NumericSeries DonchianLo;              
    NumericSeries fsDonchianHi;            
    NumericSeries fsDonchianLo;           
    Numeric ExitHighestPrice;               
    Numeric ExitLowestPrice;               
    Numeric myEntryPrice;                  
    Numeric myExitPrice;                  
    Bool SendOrderThisBar(False);         
        NumericSeries preEntryPrice(0);      
        BoolSeries PreBreakoutFailure(false);       
        Numeric TimeSeconds;
Begin
       
        If ( GetGlobalVar(10)==InvalidNumeric  )        SetGlobalVar(10,0);
        TimeSeconds=Value(Left(TimeToString(CurrentTime),2))*3600                //记录系统当前时间,转化为秒数
                                +Value(Mid(TimeToString(CurrentTime),3,2))*60
                                +Value(Right(TimeToString(CurrentTime),2));        
        If ( TimeSeconds-GetGlobalVar(10)<WaitTime )        Return;        //如果发单后等待时间小于WaitTime,则返回
          

    If(BarStatus == 0)
    {
                preEntryPrice = InvalidNumeric;
                PreBreakoutFailure = false;
        }Else
        {
                preEntryPrice = preEntryPrice[1];
        PreBreakoutFailure = PreBreakoutFailure[1];
    }

        MinPoint = MinMove*PriceScale;
    N = XAverage(TrueRange,ATRLength);
    TotalEquity = A_CurrentEquity()*BFB /* CurrentCapital()+ Abs(CurrentContracts()*Close*ContractUnit()*BigPointValue()*MarginRatio()) */;
    TurtleUnits = (TotalEquity*RiskRatio/100) /(N * ContractUnit()*BigPointValue());
    TurtleUnits = IntPart(TurtleUnits); // 对小数取整

    DonchianHi = HighestFC(High[1],boLength);
    DonchianLo = LowestFC(Low[1],boLength);

        fsDonchianHi = HighestFC(High[1],fsLength);
    fsDonchianLo = LowestFC(Low[1],fsLength);

        Commentary("N="+Text(N));
        Commentary("preEntryPrice="+Text(preEntryPrice));
        Commentary("PreBreakoutFailure="+IIFString(PreBreakoutFailure,"True","False"));
       
    // 当不使用过滤条件,或者使用过滤条件并且条件为PreBreakoutFailure为True进行后续操作
    If(A_TotalPosition == 0 && ((!LastProfitableTradeFilter) Or (PreBreakoutFailure)))
    {
        // 突破开仓
        If(CrossOver(High,DonchianHi) && TurtleUnits >= 1)
        {
            // 开仓价格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交
            myEntryPrice = min(high,DonchianHi + MinPoint);
            myEntryPrice = IIF(myEntryPrice < Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替
                        preEntryPrice = myEntryPrice;
            A_SendOrder(Enum_Buy,Enum_Entry,TurtleUnits,Q_AskPrice()+MinPoint);
                        SetGlobalVar(10,TimeSeconds);
                        SendOrderThisBar = True;
                        PreBreakoutFailure = False;
        }

        If(CrossUnder(Low,DonchianLo) && TurtleUnits >= 1)
        {
            // 开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交
            myEntryPrice = max(low,DonchianLo - MinPoint);
            myEntryPrice = IIF(myEntryPrice > Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替
            preEntryPrice = myEntryPrice;
            A_SendOrder(Enum_Sell,Enum_Entry,TurtleUnits,Q_BidPrice()-MinPoint);
                        SetGlobalVar(10,TimeSeconds);
                        SendOrderThisBar = True;
                        PreBreakoutFailure = False;
        }
    }

    // 长周期突破开仓 Failsafe Breakout point
    If(A_TotalPosition == 0)
    {
                Commentary("fsDonchianHi="+Text(fsDonchianHi));
        If(CrossOver(High,fsDonchianHi) && TurtleUnits >= 1)
        {
            // 开仓价格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交
            myEntryPrice = min(high,fsDonchianHi + MinPoint);
            myEntryPrice = IIF(myEntryPrice < Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替
                        preEntryPrice = myEntryPrice;
            A_SendOrder(Enum_Buy,Enum_Entry,TurtleUnits,Q_AskPrice()+MinPoint);
                        SetGlobalVar(10,TimeSeconds);
                        SendOrderThisBar = True;
                        PreBreakoutFailure = False;
        }

                Commentary("fsDonchianLo="+Text(fsDonchianLo));
        If(CrossUnder(Low,fsDonchianLo) && TurtleUnits >= 1)
        {
            // 开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交
            myEntryPrice = max(low,fsDonchianLo - MinPoint);
            myEntryPrice = IIF(myEntryPrice > Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替
            preEntryPrice = myEntryPrice;
            A_SendOrder(Enum_Sell,Enum_Entry,TurtleUnits,Q_BidPrice()-MinPoint);
                        SetGlobalVar(10,TimeSeconds);
                        SendOrderThisBar = True;
                        PreBreakoutFailure = False;
        }
    }

    If(A_TodayBuyPosition > 0) // 有多仓的情况
    {
        // 求出持多仓时离市的条件比较值
        ExitLowestPrice = Lowest(Low[1],teLength);
                Commentary("ExitLowestPrice="+Text(ExitLowestPrice));
        If(Low < ExitLowestPrice)
        {
            /* myExitPrice = max(Low,ExitLowestPrice - MinPoint);
                        myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice); // 大跳空的时候用开盘价代替 */
            A_SendOrder(Enum_Sell,Enum_Exit,A_BuyPosition(),Q_BidPrice()-MinPoint) ;    // 数量用0的情况下将全部平仓
                        SetGlobalVar(10,TimeSeconds);
        }Else
        {
            If(preEntryPrice!=InvalidNumeric && TurtleUnits >= 1)
            {
                If(Open >= preEntryPrice + 0.5*N) // 如果开盘就超过设定的1/2N,则直接用开盘价增仓。
                {
                    myEntryPrice = Open;
                                        preEntryPrice = myEntryPrice;
                    A_SendOrder(Enum_Buy,Enum_Entry,TurtleUnits,Q_AskPrice()+MinPoint);
                                        SetGlobalVar(10,TimeSeconds);
                                        SendOrderThisBar = True;
                }

                while(High >= preEntryPrice + 0.5*N) // 以最高价为标准,判断能进行几次增仓
                {
                    myEntryPrice = preEntryPrice + 0.5 * N;
                    preEntryPrice = myEntryPrice;
                   A_SendOrder(Enum_Buy,Enum_Entry,TurtleUnits,Q_AskPrice()+MinPoint);
                                        SetGlobalVar(10,TimeSeconds);

                                        SendOrderThisBar = True;                                       
                }
            }
                       
            // 止损指令
                        If(Low <= preEntryPrice - 2 * N && SendOrderThisBar == false) // 加仓Bar不止损
                        {
                                //myExitPrice = preEntryPrice - 2 * N;
                                A_SendOrder(Enum_Sell,Enum_Exit,A_BuyPosition(),Q_BidPrice()-MinPoint); // 数量用0的情况下将全部平仓
                                SetGlobalVar(10,TimeSeconds);
                                PreBreakoutFailure = True;
                        }
        }
    }Else If(A_TodaySellPosition >0 ) // 有空仓的情况
    {
        // 求出持空仓时离市的条件比较值
        ExitHighestPrice = Highest(High[1],teLength);
                Commentary("ExitHighestPrice="+Text(ExitHighestPrice));
        If(High > ExitHighestPrice)
        {
            /* myExitPrice = Min(High,ExitHighestPrice + MinPoint);
                        myExitPrice = IIF(myExitPrice < Open, Open,myExitPrice); // 大跳空的时候用开盘价代替 */
            A_SendOrder(Enum_Buy,Enum_Exit,A_TodaySellPosition(),Q_AskPrice()+MinPoint);    // 数量用0的情况下将全部平仓
                        SetGlobalVar(10,TimeSeconds);
        }Else
        {
            If(preEntryPrice!=InvalidNumeric && TurtleUnits >= 1)
            {
                If(Open <= preEntryPrice - 0.5*N) // 如果开盘就超过设定的1/2N,则直接用开盘价增仓。
                {
                    myEntryPrice = Open;
                                        preEntryPrice = myEntryPrice;
                   A_SendOrder(Enum_Sell,Enum_Entry,TurtleUnits,Q_BidPrice()-MinPoint);
                                        SetGlobalVar(10,TimeSeconds);
                                        SendOrderThisBar = True;
                }

                while(Low <= preEntryPrice - 0.5*N) // 以最低价为标准,判断能进行几次增仓
                {
                    myEntryPrice = preEntryPrice - 0.5 * N;
                    preEntryPrice = myEntryPrice;
                    A_SendOrder(Enum_Sell,Enum_Entry,TurtleUnits,Q_BidPrice()-MinPoint);
                                        SetGlobalVar(10,TimeSeconds);

                                        SendOrderThisBar = True;
                }
            }

            // 止损指令
                        If(High >= preEntryPrice + 2 * N &&SendOrderThisBar==false) // 加仓Bar不止损
                        {
                                //myExitPrice = preEntryPrice + 2 * N;
                                A_SendOrder(Enum_Buy,Enum_Exit,A_TodaySellPosition(),Q_AskPrice()+MinPoint); // 数量用0的情况下将全部平仓
                                SetGlobalVar(10,TimeSeconds);
                                PreBreakoutFailure = True;
                        }
        }
    }
End

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
2
UID
4130
积分
20901
帖子
6519
主题
17
阅读权限
200
注册时间
2009-4-15
最后登录
2019-4-12
3#
发表于 2010-8-5 13:58:44 |只看该作者
要用全局变量控制发单,否则A_SendOrder会一直发单,直到你账户的资金用光
公式改完后,用模拟交易跑跑看

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
7099
积分
614
帖子
120
主题
22
阅读权限
60
注册时间
2010-3-3
最后登录
2019-3-24
4#
发表于 2010-8-5 14:06:08 |只看该作者
哦  谢谢 我先试试

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
7286
积分
783
帖子
164
主题
39
阅读权限
60
注册时间
2010-3-11
最后登录
2019-3-30
5#
发表于 2010-8-10 17:03:07 |只看该作者
本帖最后由 文静的狮子 于 2010-8-16 17:20 编辑

用setTBProfileString

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-4-28 06:55

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部