//------------------------------------------------------------------------
// 简称:OutputSignalToFile
// 名称:輸出訊號到文檔
// 类别: 交易指令
// 类型: 用户应用
//www.bp-system.com
//Created By Matthew AY
//20171017
//------------------------------------------------------------------------
Params
//参数定义
String Path("C:\\CSV\\test.ini") ;//記錄路徑
//
Bool Id_MA(True) ;//啟用選項
//
Numeric FastMA1(5) ; //均线 1 周期
String MA1_SWE("S") ; //S=SMA W=WMA E=EMA
Numeric SlowMA2(35) ; //均线 2 周期
String MA2_SWE("S") ; //S=SMA W=WMA E=EMA
Numeric MA_AfterConfirm(0) ; //訊號後X支燭做 0=不使用 1=訊號後1支
//
Bool Id_MACD(True) ;//啟用選項
//
Integer LongPrd(26) ; //快線 EMA
Integer ShortPrd(12) ;//慢線 EMA
Integer M(9) ; //SMA
Numeric MACD_AfterConfirm(0) ; //訊號後X支燭做 0=不使用 1=訊號後1支
//
Bool Id_RSI(True) ;//啟用選項
Integer N1(6) ; //RSI 平均周期
Integer RSI_TopLine(90) ; //RSI 上線跌穿沽
Integer RSI_BotLine(10) ; //RSI 下線升穿買
Numeric RSI_AfterConfirm(0) ; //訊號後X支燭做 0=不使用 1=訊號後1支
//
String Id_Tradeset("Tradeset") ;//ID無意思只用於分開選項
//
Numeric TradeUint(1) ; //每次交易手数
//
Numeric StopPoint(0) ; //止损点 0 = 不使用
Numeric WinPoint(0) ; //止赢点 0 = 不使用
//
Numeric FlostStopStartPoint(0) ; //浮动止损启动条件 0 = 不使用
Numeric FlostStopPoint(20) ; //浮动止损点
//
GlobalVars
//全局变量定义
String GBMyStr2;
String GBMyStr3;
String GSMyStr2;
String GSMyStr3;
//
Vars
//局部变量定义
String Section;
//
String BMyStr;
String BMyStr2;
String BMyStr3;
String BMyStr4;
String SMyStr;
String SMyStr2;
String SMyStr3;
String SMyStr4;
//
String Inidicator;
String BSignal;
String SSignal;
//
Bool bCrossOver;
Bool bCrossDn;
Begin
Section = Symbol; //記錄區段名
//--------------------------------
// 取得INI 現記錄, 於ESUNNY LOG FILE 中顯示用
BMyStr = GetELProfileString2File(Path,Section,"BuyInidicator") ;
BMyStr2 = GetELProfileString2File(Path,Section,"BuySignal") ;
BMyStr3 = GetELProfileString2File(Path,Section,"BuyTime") ;
BMyStr4 = GetELProfileString2File(Path,Section,"BInterval") ;
//
SMyStr = GetELProfileString2File(Path,Section,"SellInidicator") ;
SMyStr2 = GetELProfileString2File(Path,Section,"SellSignal") ;
SMyStr3 = GetELProfileString2File(Path,Section,"SellTime") ;
SMyStr4 = GetELProfileString2File(Path,Section,"SInterval") ;
//
If (BarStatus == 2 )
{//歷史K線跳過, 最後一支K線才做
If ( GBMyStr2 != BMyStr2 And GBMyStr3 != BMyStr3 )
{
Print("BuyInidicator: BMyStr " + BMyStr) ;
Print("BuySignal: BMyStr2 " + BMyStr2 ) ;
Print("BuyTime: BMyStr3 " + BMyStr3) ;
Print("BInterval: BMyStr4 " + BMyStr4) ;
GBMyStr2 = BMyStr2;
GBMyStr3 = BMyStr3;
}
If ( GSMyStr2 != SMyStr2 And GSMyStr3 != SMyStr3 )
{
Print("SellInidicator: SMyStr " + SMyStr) ;
Print("SellSignal: SMyStr2 " + SMyStr2 ) ;
Print("SellTime: SMyStr3 " + SMyStr3) ;
Print("SInterval: SMyStr4 " + SMyStr4) ;
GSMyStr2 = SMyStr2;
GSMyStr3 = SMyStr3;
}
}
//****************************
// 重設BUY SELL 訊號
bCrossOver = False;
bCrossDn = False;
//****************************
//888888888888888888888888888888888888888888888888888
//-----【主要策略計算區】【開始】-------------
//------------------
//-----【 MA 】-----
//------------------
//-------【FastMA1 開始】-------
Numeric MA1_Num ;
Numeric MA1_SMA = AverageFC(CLOSE,FastMA1) ;
Numeric MA1_WMA = WAverage(CLOSE,FastMA1) ;
Numeric MA1_EMA = XAverage(CLOSE,FastMA1) ;
if (MA1_SWE == "W" or MA1_SWE == "w")
{//WMA
MA1_Num = MA1_WMA;
}
Else if (MA1_SWE == "E" or MA1_SWE == "e")
{//EMA
MA1_Num = MA1_EMA;
}
Else
{//SMA
// 當 MA_SWE 輸入其它字都當作SMA
MA1_Num = MA1_SMA;
}
//-------【SlowMA2 開始】-------
Numeric MA2_Num ;
Numeric MA2_SMA = AverageFC(CLOSE,SlowMA2) ;
Numeric MA2_WMA = WAverage(CLOSE,SlowMA2) ;
Numeric MA2_EMA = XAverage(CLOSE,SlowMA2) ;
if (MA2_SWE == "W" or MA2_SWE == "w")
{//WMA
MA2_Num = MA2_WMA;
}
Else if (MA2_SWE == "E" or MA2_SWE == "e")
{//EMA
MA2_Num = MA2_EMA;
}
Else
{//SMA
// 當 MA_SWE 輸入其它字都當作SMA
MA2_Num = MA2_SMA;
}
//--------------------
PlotNumeric("MA1",MA1_Num,Blue) ;
PlotNumeric("MA2",MA2_Num,Green) ;
//------------------
Bool MAbuy = CrossOver(MA1_Num,MA2_Num ) ;
Bool MAsell = CrossUnder(MA1_Num,MA2_Num ) ;
Bool MAbuyX = REF(CrossOver(MA1_Num,MA2_Num ),MA_AfterConfirm) ;
Bool MAsellX = REF(CrossUnder(MA1_Num,MA2_Num ),MA_AfterConfirm) ;
If (MA_AfterConfirm > 0)
{// X 燭確認後
MAbuy = MAbuyX;
MAsell = MAsellX;
}
//
if ( Id_MA == False )
{
MAbuy = False ;
MAsell = False ;
}
//---------
//CHECK SIGNAL -> String
//MA
if (MAbuy == True or MAsell == True)
{
Inidicator = "( "+ MA1_SWE + "MA:" +
Text(FastMA1) + "," +
MA2_SWE + "MA:" +
"," + Text(SlowMA2) + " )";
}
//------------------
//-----【MA End】-
//************************
//************************
//------------------
//-----【MACD】-----
//------------------
Numeric DIFF = EMA(Close,ShortPrd) - EMA(Close,LongPrd) ;
Numeric DEA = EMA(DIFF,M) ;
Numeric ret = 2*(DIFF-DEA) ;
PlotNumeric("DIFF",DIFF) ;
PlotNumeric("DEA",DEA) ;
//由於MACD 不能同一窗顯示, 所以只取訊號
/*
if(ret > 0)
{
PlotStickLine("MACD",ret,0,ColorUp()) ;
}
Else
{
PlotStickLine("MACD",ret,0,ColorDown()) ;
}
SetOwnAxis("DIFF") ;
SetOwnAxis("DEA") ;
SetOwnAxis("MACD") ;
*/
Bool MACDbuy = CrossOver(DIFF,DEA) ;
Bool MACDsell = CrossUnder(DIFF,DEA) ;
Bool MACDbuyX = REF(CrossOver(DIFF,DEA),MACD_AfterConfirm) ;
Bool MACDsellX = REF(CrossUnder(DIFF,DEA),MACD_AfterConfirm) ;
If (MACD_AfterConfirm > 0)
{// X 燭確認後
MACDbuy = MACDbuyX ;
MACDsell = MACDsellX ;
}
//
If (Id_MACD == False)
{
MACDbuy = False ;
MACDsell = False;
}
//CHECK SIGNAL -> String
//MACD
if (MACDbuy == True or MACDsell == True)
{
/* Integer LongPrd(26) ; //快線 EMA
Integer ShortPrd(12) ;//慢線 EMA
Integer M(9) ; //SMA*/
Inidicator = "( MACD:" + Text(LongPrd) +
" "+ Text(ShortPrd) +
" " + Text(M) + " )";
}
//------------------
//-----【MACD End】-
//------------------
//************************
//************************
//------------------
//-----【 RSI 】-----
//------------------
/*
String Id_RSI("RSI") ;//ID無意思只用於分開選項
Integer N1(6) ; //RSI 平均周期
Integer RSI_TopLine(90) ; //RSI 上線跌穿沽
Integer RSI_BotLine(10) ; //RSI 下線升穿買
*/
Numeric LC = REF(CLOSE,1) ;
Numeric RSI1 =SMA(MAX(CLOSE-LC,0),N1,1)/SMA(ABS(CLOSE-LC),N1,1)*100;
//由於RSI 不能同一窗顯示, 所以只取訊號
/*
PlotNumeric("RSI1",RSI1) ;
PlotNumeric("top", 100 ) ;
PlotNumeric("mid", 50 ) ;
PlotNumeric("bot", 0 ) ;
PlotText( 100 , "100%") ;
PlotText( 0 , "0%") ;
PlotText( RSI1 , "RSI:"+ text(round(RSI1,0))) ;
UnPlotText(1) ;
*/
Bool RSIbuy = CrossOver(RSI1,RSI_BotLine) ;
Bool RSIsell = CrossUnder(RSI1,RSI_TopLine) ;
Bool RSIbuyX = REF(CrossOver(RSI1,RSI_BotLine), RSI_AfterConfirm) ;
Bool RSIsellX = REF(CrossUnder(RSI1,RSI_TopLine), RSI_AfterConfirm) ;
If (MACD_AfterConfirm > 0)
{// X 燭確認後
RSIbuy = RSIbuyX;
RSIsell = RSIsellX;
}
//
If ( Id_RSI == False)
{
RSIbuy = False;
RSIsell = False;
}
//CHECK SIGNAL -> String
//RSI
if (RSIbuy == True or RSIsell == True)
{
Inidicator = "( RSI:" + Text(N1) +
" "+ Text(RSI_TopLine) +
" " + Text(RSI_BotLine) + " )";
}
//------------------
//-----【RSI End】-
//------------------
//************************
//*************************
//------------------------------------
//-- 所有條件最後訊號表達位置 ------- 後續自己用 OR 加上去
//註: 留意如果啟動 AUTOTRADE 真的會有買賣能力
if (MAbuy == True Or MACDbuy == True Or RSIbuy == True )
{
BSignal = "Buy";
SSignal = "Waiting";
//買入指令, 目的圖表上顯示箭頭用
Buy(TradeUint,Open) ;
}
Else if (MAsell == True Or MACDsell == True Or RSIsell == True )
{
BSignal = "Waiting";
SSignal = "Sell";
//沽出指令, 目的圖表上顯示箭頭用
SellShort(TradeUint,Open) ;
}
Else
{
BSignal = "Waiting";
SSignal = "Waiting";
}
//---------
//---------
//****************************
//[test]
If (BarStatus == 2 )
{
//跳過歷史數據, 只在最後一支K線開始記錄
//將產品代號當作 Section 標籤, 記錄入指定"INI" 檔案, 目的給EXCEL VBA 讀取, 再發 CDO EMAIL
//Path
//Section
//Inidicator
//BUY 號資料數據
if (Inidicator != BMyStr or BSignal != BMyStr2)
{
SetELProfileString2File(Path,Section,"BuyInidicator",Inidicator) ;
SetELProfileString2File(Path,Section,"BuySignal",BSignal) ;
SetELProfileString2File(Path,Section,"BuyTime",Text(Time)) ;
SetELProfileString2File(Path,Section,"BInterval",Text(BarInterval)) ;
Print("BuyInidicator: " + Inidicator) ;
Print("BuySignal: " + BSignal ) ;
Print("BuyTime: " + Text(Time)) ;
Print("BInterval: " + Text(BarInterval)) ;
}
//SELL 號資料數據
if (Inidicator != SMyStr or SSignal != SMyStr2)
{
SetELProfileString2File(Path,Section,"SellInidicator",Inidicator) ;
SetELProfileString2File(Path,Section,"SellSignal",SSignal) ;
SetELProfileString2File(Path,Section,"SellTime",Text(Time)) ;
SetELProfileString2File(Path,Section,"SInterval",Text(BarInterval)) ;
Print("SellInidicator: " + Inidicator) ;
Print("SellSignal: " + SSignal ) ;
Print("SellTime: " + Text(Time)) ;
}
//
}
//
//****************************
//止盈止损
if (WinPoint > 0 )
{
SetWinPoint(WinPoint) ;
}
//止损点
if (StopPoint > 0 )
{
SetStopPoint(StopPoint) ;
}
//浮动止损
if (FlostStopStartPoint > 0 )
{
SetFloatStopPoint(FlostStopStartPoint,FlostStopPoint) ;
}
//www.bp-system.com
//Created By Matthew AY
//
End