另外請問 如何貼上整齊漂亮的程式碼呢?
编辑栏有个工具按钮 </> ,就是贴代码的
句柄是int 类型 不是double
int iHighest_handle; //存儲句柄 int iLowest_handle; //存儲句柄
//--- 供参考...
//想建立一個五日高點突破的買進訊號 // 五日低點跌破的賣出訊號 //請問大大要如何寫呢? //懇請指點一二 謝謝 //ps.以下是改編簡單的均線系統 //+----------------------------------------------- -------------------+ //| EA初始化1 //+----------------------------------------------- -------------------+ #include<Trade\Trade.mqh>//包含執行的交易庫 #include<Trade\PositionInfo.mqh>//包含部位的資訊庫 input int UpPeriod=5; input int DownPeriod=5; int iHighest_handle; //存儲句柄 int iLowest_handle; //存儲句柄 double Up_buf[]; //存儲每個柱形價格的動態數組 double Down_buf[]; //存儲每個柱形價格的動態數組 double Close_buf[]; //存儲每個柱形價格的動態數組 string my_symbol; //存儲交易品種的變量 ENUM_TIMEFRAMES my_timeframe; //存儲時間框架的變量 CTrade m_Trade; //執行交易的結構體 CPositionInfo m_Position; //獲取持倉信息的結構體 //+----------------------------------------------- -------------------+ //| EA初始化2 //+----------------------------------------------- -------------------+ int OnInit() { my_symbol= Symbol(); //保存當前圖表的交易品種,使EA對其進一步的操作。 my_timeframe= PERIOD_CURRENT; //保存圖表的當前時間框架,使EA對其的進一步操作。 ArraySetAsSeries(Up_buf,true); //將 iMA_buf 數組的索引設置為時間序列 ArraySetAsSeries (Down_buf,true ); //將 iMA_buf 數組的索引設置為時間序列 ArraySetAsSeries (Close_buf, true ); //將Close_buf數組的索引設置為時間序列 return(0); //返回0,初始化結束 } //+----------------------------------------------- -------------------+ //| EA去初始化函數| //+----------------------------------------------- -------------------+ void OnDeinit(const int reason) { ArrayFree(Up_buf); //釋放動態數組 iMA_buf 的數據 ArrayFree(Down_buf); //釋放動態數組 iMA_buf 的數據 ArrayFree (Close_buf); //釋放動態數組Close_buf的數據 } //+----------------------------------------------- -------------------+ //| EA的tick函數| //+----------------------------------------------- -------------------+ void OnTick() { if(CopyClose(my_symbol,my_timeframe,0,2,Close_buf)!=2) //將價格數據拷貝到動態數Close_buf中,以於進一步處理 { Print("Failed to copy data from the indicator buffer or price chart buffer"); //打印相關錯誤信息到日誌文件 return; //並退出函數 } int index=iHighest(my_symbol,my_timeframe,MODE_HIGH,5,0); double hi5=iHigh(my_symbol,my_timeframe,index); index=iLowest(my_symbol,my_timeframe,MODE_LOW,5,0); double low5=iLow(my_symbol,my_timeframe,index); if(Close_buf[0]>hi5) //收盤站上 5周期高点 { if(m_Position.Select(my_symbol)) //如果該商品已開倉 { if(m_Position.PositionType()==POSITION_TYPE_SELL) m_Trade.PositionClose(my_symbol); //如果已有空單,就平倉 if(m_Position.PositionType()==POSITION_TYPE_BUY) return; //如已經有多單,就退出 } m_Trade.Buy(1,my_symbol); //到這裡表示沒部位;進多單 } if(Close_buf[0]<low5) //收盤跌破5周期低点 { if(m_Position.Select(my_symbol))//如果該商品已開倉 { if(m_Position.PositionType()==POSITION_TYPE_BUY) m_Trade.PositionClose(my_symbol); //如果已有多單,就平倉 if(m_Position.PositionType()==POSITION_TYPE_SELL) return; //如已經有空單,就退出 } m_Trade.Sell(1,my_symbol); //到這裡表示沒部位;進空單 } } //+----------------------------------------------- -------------------+
謝謝 但好像還是不能用?
我想其中一個原因是
buffer 跟 copy 參數 搞不清楚
該怎麼設定才對呢??
//想建立一個五日高點突破的買進訊號 // 五日低點跌破的賣出訊號 //請問大大要如何寫呢? //懇請指點一二 謝謝 //ps.以下是改編簡單的均線系統(運作良好) //但圖表與程式都沒出來 //+----------------------------------------------- -------------------+ //| EA初始化1 //+----------------------------------------------- -------------------+ #include<Trade\Trade.mqh>//包含執行的交易庫 #include<Trade\PositionInfo.mqh>//包含部位的資訊庫 int iHighest_handle; //存儲句柄 int iLowest_handle; //存儲句柄 double Up_buf[]; //存儲每個柱形價格的動態數組 double Down_buf[]; //存儲每個柱形價格的動態數組 double Close_buf[]; //存儲每個柱形價格的動態數組 string my_symbol; //存儲交易品種的變量 ENUM_TIMEFRAMES my_timeframe; //存儲時間框架的變量 CTrade m_Trade; //執行交易的結構體 CPositionInfo m_Position; //獲取持倉信息的結構體 //+----------------------------------------------- -------------------+ //| EA初始化2 //+----------------------------------------------- -------------------+ int OnInit() { my_symbol= Symbol(); //保存當前圖表的交易品種,使EA對其進一步操作。 my_timeframe= PERIOD_CURRENT; //保存圖表的當前時間框架,使EA對其進一步操作。 iHighest_handle= iHighest(my_symbol,my_timeframe,MODE_HIGH,6,1); //應用此指標並獲取指標句柄 iLowest_handle = iLowest(my_symbol,my_timeframe,MODE_LOW,6,1); //應用此指標並獲取指標句柄 if (iHighest_handle== INVALID_HANDLE ||iLowest_handle== INVALID_HANDLE ) //檢查指標句柄是否可用 { Print ( "Failed to get the indicator handle" ); //如果句柄沒有獲取到,打印相關報錯信息到日誌文件中 return (- 1 ); //完成報錯處理 } ChartIndicatorAdd ( ChartID (), 0 ,iHighest_handle); //將指標添加到價格圖表中 ChartIndicatorAdd ( ChartID (), 0 ,iLowest_handle); //將指標添加到價格圖表中 ArraySetAsSeries (Up_buf,true); //將數組的索引設置為時間序列 ArraySetAsSeries (Down_buf,true ); //將數組的索引設置為時間序列 ArraySetAsSeries (Close_buf, true ); //將數組的索引設置為時間序列 return(0); //返回0,初始化結束 } //+----------------------------------------------- -------------------+ //| EA去初始化函數| //+----------------------------------------------- -------------------+ void OnDeinit(const int reason) { IndicatorRelease (iHighest_handle); //刪除指標句柄並釋放 IndicatorRelease (iLowest_handle); //刪除指標句柄並釋放 ArrayFree(Up_buf); //釋放動態數組 ArrayFree(Down_buf); //釋放動態數組 ArrayFree (Close_buf); //釋放動態數組 } //+----------------------------------------------- -------------------+ //| EA的tick函數| //+----------------------------------------------- -------------------+ void OnTick() { int err1= 0 ; //用於存儲指標緩存處理結果的變量 int err2= 0 ; //用於存儲價格圖表處理結果的變量 int err3= 0 ; //用於存儲價格圖表處理結果的變量 err1= CopyBuffer (iHighest_handle, 5 , 1 , 2 ,Up_buf); //將指標數據拷貝到動態數組,以進一步處理 err2= CopyBuffer (iLowest_handle, 5 , 1 , 2 ,Down_buf); //將指標數據拷貝到動態數組,以進一步處理 err3= CopyClose (my_symbol,my_timeframe, 1 , 2 ,Close_buf); //將價格數據拷貝到動態數組,以進一步處理 if (err1< 0 || err2< 0 || err3< 0 ) //如果出錯 { Print ( "Failed to copy data from the indicator buffer or price chart buffer" ); //打印相關錯誤信息到日誌文件 return ; //並退出函數 } if(Close_buf[0]> Up_buf[0]) //收盤站上 區間高點 { if(m_Position.Select(my_symbol)) //如該商品已開倉 { if(m_Position.PositionType()==POSITION_TYPE_SELL) m_Trade.PositionClose(my_symbol); //如有空單,就平倉 if(m_Position.PositionType()==POSITION_TYPE_BUY) return; //如已經有多單,就退出 } m_Trade.Buy(1,my_symbol); //到這裡表示沒部位;進多單 } if(Close_buf[0]<Down_buf[0]) //收盤跌破 區間低點 { if(m_Position.Select(my_symbol))//如該商品已開倉 { if(m_Position.PositionType()==POSITION_TYPE_BUY) m_Trade.PositionClose(my_symbol); //如有多單,就平倉 if(m_Position.PositionType()==POSITION_TYPE_SELL) return; //如已有空單,就退出 } m_Trade.Sell(1,my_symbol); //到這裡表示沒部位;進空單 } } //+----------------------------------------------- -------------------+
int index=iHighest(my_symbol,my_timeframe,MODE_HIGH,5,1); double hi5=iHigh(my_symbol,my_timeframe,index); index=iLowest(my_symbol,my_timeframe,MODE_LOW,5,1); double low5=iLow(my_symbol,my_timeframe,index);
0改成1
CopyBuffer(),CopyClose()搞不懂参考文档,有详细的解释。
哇!! 可以喔 太感謝Ziheng Zhuang大大了
請問
if(m_Position.PositionType()==POSITION_TYPE_SELL) m_Trade.PositionClose(my_symbol);
這樣是對的嗎?
實際運作會變成多空並存!!??
要怎麼樣才能變成直接平倉呢??
請問 hi5 low5 可以畫在主圖上嗎?
SendNotification(
my_symbol + "\n" + "注意!!五日高低區間已穿越 ( " +時間架構T +" )"
);
請問 目前圖表如果是H1的時間架構
要怎麼讓時間架構顯示在 通知內呢?
陳柏昌:
哇!! 可以喔 太感謝Ziheng Zhuang大大了
請問
if(m_Position.PositionType()==POSITION_TYPE_SELL) m_Trade.PositionClose(my_symbol);
這樣是對的嗎?
實際運作會變成多空並存!!??
要怎麼樣才能變成直接平倉呢??
不会多空并存。
这样写就是直接平仓。
陳柏昌:
請問 hi5 low5 可以畫在主圖上嗎?
编写成指标。
//想建立一個五日高點突破的買進訊號