MT4輸出開高低收到文件(原碼範例)
尋了許久終於找到一個範例但我不知如何能每五秒讓他自行輸出一次
請各位幫忙解惑
底下是
MT4輸出開高低收到文件(原碼範例)
//+------------------------------------------------------------------+
//| bbb.mq4 |
//| Copyright ?2011, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright ?2011, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//----
int handle;
datetime orderOpen=OrderOpenTime();
handle=FileOpen("filename.csv", FILE_CSV|FILE_WRITE, ';');
if(handle>0)
{
FileWrite(handle, Close, Open, High, Low, TimeToStr(orderOpen));
FileClose(handle);
}
//----
return(0);
}
//+------------------------------------------------------------------+
你直接跟我講:
你需要 什麼?
我給你 程式 你直接跟我講:
你需要 什麼?
我給你 程式
無無明 發表於 11-5-27 12:48 PM http://coco-in.net/images/common/back.gif
明大真是個大好人
我的構想是每五秒輸出一筆五行格式的日線
開
高
低
收
直接寫入到R:\TEST.txt
每執行一次就覆蓋掉原先的TEST.txt
請明大幫忙惠賜原碼我好加入其他數據
感恩 不要 每5秒 太麻煩了
給你 tick by tick 的
然後 輸出檔案,不能隨意,只能放在 MT4 安裝目錄的
C:\MT4 主目錄\experts\files 底下
//=============================================================================
// tcINTickDataA.mq4modified by Trading144.net
// modified from TickSave.mq4
// written by komposter at komposterius@mail.ru
// 04/09/08 modified for format
// logs date time and bid to \experts\files\TickData\<symbol>.csv
// (Example output: 2008.05.07 22:25:21;1.5316)
// runs as an indicator on 1 minute (or any) chart
// places the record count in a separate window
//=============================================================================
#property copyright "Copyright"//komposter
#property link "" //many thanks to the original author(s)
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
extern int i_1Override_2Append = 2;
int iRcdCnt = 0;
string sFileName = "";
string sComment = "";
bool bRtn = false;
int iRtn = 0;
int err = 0;
double ExtMapBuffer[];
bool bFirst=True;
bool bKilled = false;
int prevPeriod=0;
int initBars=0;
int prevBars=0;
bool bOneTime = false;
//=============================================================================
// indicator initialization function
//=============================================================================
int init() {
string short_name;
short_name = "TickDataA(" + i_1Override_2Append + ")";
IndicatorShortName(short_name);
SetIndexStyle(0,DRAW_LINE,0,1);
SetIndexBuffer(0,ExtMapBuffer);
SetIndexLabel(0,short_name);
IndicatorDigits(0);
return(0);
}
//=============================================================================
// deinitialization function
//=============================================================================
int deinit() {
Comment("");
return(0);
}
//=============================================================================
// start function
//=============================================================================
int start() {
if ( bKilled == true ) return;
if ((i_1Override_2Append == 1) || (i_1Override_2Append == 2)) {
//valid parm entered
} else {
sComment = "Please select valid Overwrite or Append parameter.";
Print(sComment);
Comment(sComment);
bKilled = true;
return(-1);
}
sFileName = StringConcatenate( "TickData\\", Symbol() + ".csv" );
if(bOneTime == false) {
bOneTime = true;
Print("output file name is: ", sFileName);
}
if(Period() != prevPeriod) {
prevPeriod = Period();
bFirst = True;
}
if(IndicatorCounted() == 0) bFirst = True;
if(bFirst == True) {
initBars = Bars;
prevBars = Bars;
//calculate x on loaded bars - if wanted
//int kklmt = Bars-20; //allow for lookback
//for(int kk=kklmt; kk>=1; kk--) {
// iRtn = Calc_X(kk);
//}
if ( i_1Override_2Append == 1 ) {
FileDelete(sFileName);
}
bFirst = False;
}
//Initialize End
//All bars (full and tick)
if(Bars <= initBars) return; //are we past initially loaded bars
//if(Bars == prevBars) { //still filling out current bar
// //Print("continuation bar.", TimeToStr(CurTime()),"bars: ",Bars,TimeToStr(Time));
//} else { //first tick of new bar, process prior bar
// //Print("new bar.", TimeToStr(CurTime()),"bars: ",Bars,TimeToStr(Time));
// iRtn = Write_Tick();
//}
iRtn = Write_Tick();
prevBars = Bars;
return(0);
}
int Write_Tick() {
iRcdCnt++;
//Comment("writing rcd no: " , iRcdCnt);
int handle;
handle = FileOpen(sFileName, FILE_READ|FILE_WRITE|FILE_CSV, ";");
bRtn = FileSeek(handle, 0, SEEK_END);
if (bRtn == false) {
err=GetLastError();
Print("error of seek: ",err);
return(-1);
}
FileWrite(handle, TimeToStr(CurTime(), TIME_DATE|TIME_SECONDS), Bid);
FileClose(handle);
ExtMapBuffer = iRcdCnt;
return(0);
}
//--- end --- sFileName = StringConcatenate( "TickData\\", Symbol() + ".csv" );
這一行 控制 輸出檔案 的 目錄位置
這個代表:C:\MT4 主目錄\experts\files\TickData 底下 如果 你要 5秒,變成還要去 檢查 高低 每5秒做一次 輸出
那會變成 數據失真
一般餵入數據,可以 TICK 數據,是 最佳的方法
FileWrite(handle, TimeToStr(CurTime(), TIME_DATE|TIME_SECONDS), Bid);
可以 增加 你要輸出的 內容 或 安排 格式
例如 你要加上成交量,TICK 乃計算 跳動次數,規範 量=1
FileWrite(handle, TimeToStr(CurTime(), TIME_DATE|TIME_SECONDS), Bid,1);
這樣每行 尾巴多會有 1
handle = FileOpen(sFileName, FILE_READ|FILE_WRITE|FILE_CSV, ";");
這一行控制 分隔的符號,可以改一般EXCEL 用的 逗號
handle = FileOpen(sFileName, FILE_READ|FILE_WRITE|FILE_CSV, ","); 本帖最後由 cellan 於 11-5-27 07:02 PM 編輯
回復 6# 無無明
無大
對不起我對mt4剛接觸
我把您的原碼直接複製到ccc.mq4
可是我收尋c:\
都找無.csv 或.txt
如果 你要 5秒,變成還要去 檢查 高低 每5秒做一次 輸出
那會變成 數據失真
一般餵入數據,可以 TICK 數據 ...
無無明 發表於 11-5-27 03:41 PM http://coco-in.net/images/common/back.gif
謝謝大大分享{:4_158:} 本帖最後由 無無明 於 11-5-27 07:34 PM 編輯
這個程式 是 指標,不是 智能 EA
隨便 找一個indicator 重新命名,把 程式碼 複製取代,編譯。然後
要在 1K圖 內 加入 此項指標
注意 目錄 你要 先設定好
C:\MT4 主目錄\experts\files\TickData 本帖最後由 cellan 於 11-5-28 11:45 AM 編輯
回復 9# 無無明
感謝無明大耐心的教導
已照您教導的複製到自定義指標裡了
C:\Program Files\FxPro - MetaTrader\experts\files\TickData
也建立妥了
可能因為今天外匯因沒交易因此沒動靜
得等周一在試囉
無明大
如果我只需輸出日線開盤價
是不是只要將
FileWrite(handle, TimeToStr(CurTime(), TIME_DATE|TIME_SECONDS), Bid);
改成
FileWrite(handle,Open);
即可呢
因為mt4 dde無日線的開盤價
我最主要的目的只要能時時取得日線的開盤價即可
如此便可補足dde所缺的開盤價
其餘的日線高低
與現收我從dde取得就行 本帖最後由 無無明 於 11-5-29 12:47 PM 編輯
如果 你要取的 日線圖的開盤價
那 這個輸出指標 就要放在 日線圖內
可以 輸出 所有圖形內 K棒的 開盤價
所以,還是要加上日期
請把程式碼 改成這個,然後在 日線圖 放進去這個指標,就會直接輸出100筆日線圖開盤價的CSV檔案到 TickData\ 底下
不用等跳動。
#property indicator_chart_window
int handle;
string FileNameA = "";
int start()
{
FileNameA = StringConcatenate( "TickData\\", Symbol() + ".csv" );
handle = FileOpen(FileNameA, FILE_READ|FILE_WRITE|FILE_CSV, ";");// 可改用 ,
for(int i=100; i<=0; i--)//100 可以改 看你要輸出幾筆?
{
FileWrite(handle, TimeToStr(Time, TIME_DATE),Open );
}
} 回復 11# 無無明
已可輸出了ㄟ
無名大
如果我要強制他輸出到R:\ TEMP\
該如何改
另請問日線增加(每日開盤)時能否讓他自動再輸出一次覆蓋原來檔案
因為開盤價是不會變動
因此我想簡略僅需開啟時輸出一次
每日開盤時固定再輸出一次覆蓋原先檔即可
謝謝無名大的幫忙 回復 12# cellan
MT4 使用程式 輸出檔案 只能放在 C:\Program Files\FxPro - MetaTrader\experts\files\ 底下
沒辦法到其他地方
你要 自己搬,畢竟開盤價 出來 之後 不會改變了 回復 13# 無無明
那我就先這樣用
再次謝謝無明大的幫忙
感恩 {:4_628:}{:4_628:}{:4_628:}
頁:
[1]
2