COCO研究院

 找回密碼
 註冊
搜索
查看: 3726|回復: 8

請問怎麼讓StrategyQuant v3.8.2轉成MC的程式程式碼能在MC上正.....

[複製鏈接]
發表於 18-3-31 16:39 | 顯示全部樓層 |閱讀模式
本帖最後由 Haydn 於 18-3-31 16:41 編輯

這程式碼是從定量策略大師 StrategyQuant v3.8.2轉成MC的程式碼  
放進MC後 編譯成功 但是放進圖形後沒有反應 請問要修改哪裡讓城市能正常運作


inputs:


//------------------------------------------------------------------
// Strategy Options
MaxTradesPerDay(0),
ExitOnClose(true),
LimitSignalsToRange(true),
TimeRangeFrom(0800),
TimeRangeTo(0400),


//------------------------------------------------------------------
// Money Management Parameters
// MoneyManagementType:
//  0 - fixed size (from TradeSize)
//  1 - risk fixed % of account equity
//  2 - risk fixed amount in $
//------------------------------------------------------------------
CapitalSize(10000),
MoneyManagementType(0),
TradeSize(1.0),
SizeRounding(0),
RiskPerTrade(0), // in % or in $, depending on MM type
MaxTradeSize(0);


vars:
tickSize(MinMove/PriceScale),
PriceLevel(0), NumberOfShares(0),
LongSL(0),LongPT(0),
ShortSL(0),ShortPT(0),
SLSize(0),
LongEntryCondition(false),ShortEntryCondition(false),
LongExitCondition(false),ShortExitCondition(false);


// ------------------------------------------
// ENTRY RULES
// ------------------------------------------
if(LimitSignalsToRange = false or (Time >= TimeRangeFrom and Time < TimeRangeTo)) then begin


    // Long --------
    if(MaxTradesPerDay = 0 or EntriesToday(Date) < MaxTradesPerDay) then begin
        LongEntryCondition = ((Average(Close,2)[1] < Average(Close,9)[1]) and (Average(Close,2)[0] >= Average(Close,9)[0]));
        if(LongEntryCondition = true) then begin
            SLSize = 31 * tickSize;
            //NumberOfShares = SQ_MoneyManagement(CapitalSize, SLSize, MoneyManagementType, TradeSize, SizeRounding, RiskPerTrade, MaxTradeSize);


            if(MarketPosition = 0) then
                Buy("LongMarket") NumberOfShares shares next bar at market;
                end;
    end;


    // Short --------
    if(MaxTradesPerDay = 0 or EntriesToday(Date) < MaxTradesPerDay) then begin
        ShortEntryCondition = ((Average(Close,2)[1] > Average(Close,9)[1]) and (Average(Close,2)[0] <= Average(Close,9)[0]));
        if(ShortEntryCondition = true) then begin
            SLSize = 31 * tickSize;
            //NumberOfShares = SQ_MoneyManagement(CapitalSize, SLSize, MoneyManagementType, TradeSize, SizeRounding, RiskPerTrade, MaxTradeSize);
            if(MarketPosition = 0) then
                SellShort("ShortMarket") NumberOfShares shares next bar at market;
        end;
        end;
end;


// ------------------------------------------
// MANAGE TRADE & EXIT RULES
// ------------------------------------------


// Long --------
if(MarketPosition > 0) then begin
    If BarsSinceEntry = 0 then begin
        LongPT = 0;
        LongSL = EntryPrice - 31 * tickSize;
    end;




        // Stop trailing
    PriceLevel = Round2Fraction(Open[2] + (0.2) * (AvgTrueRange(112)[0]));
    if(PriceLevel > 0) then begin
        if(LongSL = 0 or LongSL < PriceLevel) then
            LongSL = PriceLevel;
    end;


    if(LongPT > 0) then
        Sell("LongPT") next bar at LongPT limit;
    if(LongSL > 0) then
        Sell("LongSL") next bar at LongSL stop;
end;


// Short --------
if(MarketPosition < 0) then begin
    If BarsSinceEntry = 0 then begin
        ShortPT = 0;
        ShortSL = EntryPrice + 31 * tickSize;
    end;




        // Stop trailing
    PriceLevel = Round2Fraction(Open[2] + (-0.2) * (AvgTrueRange(112)[0]));
    if(PriceLevel > 0) then begin
        if(ShortSL = 0 or ShortSL > PriceLevel) then
            ShortSL = PriceLevel;
    end;


    if(ShortPT > 0) then
        BuyToCover("ShortPT") next bar at ShortPT limit;
    if(ShortSL > 0) then
        BuyToCover("ShortSL") next bar at ShortSL stop;
end;


if(ExitOnClose) then
        SetExitOnClose;




發表於 18-3-31 17:32 | 顯示全部樓層
本帖最後由 goldriverxie 於 18-3-31 17:47 編輯

因為有兩行被註解掉了  

//NumberOfShares = SQ_MoneyManagement(CapitalSize, SLSize, MoneyManagementType, TradeSize, SizeRounding, RiskPerTrade, MaxTradeSize);



是不是因為這兩行編譯會出錯,所以就註解掉?NumberOfShares是決定下單部位大小的變數,初值為0當然不會下單


使用前應該先將SQ的公式匯入MC,這樣編譯才不會出現錯誤


SQ的公式位於:C:\StrategyQuant\custom_indicators\SQ_TRADESTATION.ELD

請先匯入公式,並將那兩註解恢復,再編譯一次

參數也不能用預設值,要改掉,例如
1, true, true, 0845, 1345, ......

評分

參與人數 1金錢 +2 收起 理由
Haydn + 2 感謝哦!

查看全部評分

回復 支持 1 反對 0

使用道具 舉報

 樓主| 發表於 18-3-31 19:17 | 顯示全部樓層
goldriverxie 發表於 18-3-31 17:32
因為有兩行被註解掉了  

//NumberOfShares = SQ_MoneyManagement(CapitalSize, SLSize, MoneyManagementTy ...

謝謝老闆!
已將SQ的公式匯入MC,並恢復註解  編譯成功
參數設定的部分
我是做外期的日內交易 數據源是用CQG 希望程式只限於在台灣時間的AM08:00~次日的AM04:00間運作
能請老闆幫忙指導一下如何設定嗎?

TKS!!!
.......................................................................................................................................................
inputs:

//------------------------------------------------------------------
// Strategy Options
MaxTradesPerDay(0),
ExitOnClose(true),
LimitSignalsToRange(true),
TimeRangeFrom(0800),
TimeRangeTo(0400),

//------------------------------------------------------------------
// Money Management Parameters
// MoneyManagementType:
//  0 - fixed size (from TradeSize)
//  1 - risk fixed % of account equity
//  2 - risk fixed amount in $
//------------------------------------------------------------------
CapitalSize(10000),
MoneyManagementType(0),
TradeSize(1),
SizeRounding(0),
RiskPerTrade(0), // in % or in $, depending on MM type
MaxTradeSize(0);




發表於 18-3-31 21:10 | 顯示全部樓層
Haydn 發表於 18-3-31 19:17
謝謝老闆!
已將SQ的公式匯入MC,並恢復註解  編譯成功
參數設定的部分

抱歉,跨日交易沒有試過,不知如何設定
 樓主| 發表於 18-3-31 22:24 | 顯示全部樓層
goldriverxie 發表於 18-3-31 21:10
抱歉,跨日交易沒有試過,不知如何設定

我再研究看看 謝謝!
 樓主| 發表於 18-3-31 22:52 | 顯示全部樓層
再請問一下 如果不理會交易時間的問題 要如何將信號顯示在圖中呢?

SQ-1.75

SQ-1.75
發表於 18-4-1 00:09 | 顯示全部樓層
Haydn 發表於 18-3-31 22:52
再請問一下 如果不理會交易時間的問題 要如何將信號顯示在圖中呢?

參數 MaxTradesPerDay,應該要大於0,否則不會有任何交易產生,
參數 LimitSignalsToRange,設為 false (不受限交易時段)
測試過,有交易訊號產生
test1.png

評分

參與人數 1金錢 +2 收起 理由
Haydn + 2 太強了

查看全部評分

 樓主| 發表於 18-4-1 00:51 | 顯示全部樓層
goldriverxie 發表於 18-4-1 00:09
參數 MaxTradesPerDay,應該要大於0,否則不會有任何交易產生,
參數 LimitSignalsToRange,設為 false ( ...

感恩師父 讚嘆師父  信號跑出來了 只要將 LimitSignalsToRange 設成False 就可以了.
MaxTradesPerDay(0) 這個應該是每天最大的交易量.
設(1) 變成一天只有一個信號 設(0) 則所有信號都出現.

再次謝謝您啊!!!




發表於 18-4-1 00:54 | 顯示全部樓層
Haydn 發表於 18-4-1 00:51
感恩師父 讚嘆師父  信號跑出來了 只要將 LimitSignalsToRange 設成False 就可以了.
MaxTradesP ...

原來如此,祝您交易順利
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|Archiver|站長信箱|廣告洽詢|COCO研究院

GMT+8, 24-4-28 07:02

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 | AI繪圖AI超擬真美女AI beauty AI Stable DiffusionAI正妹AI Lookbook