COCO研究院

 找回密碼
 註冊
搜索
查看: 11043|回復: 18

MT4輸出開高低收到文件(原碼範例)

[複製鏈接]
發表於 11-5-27 12:16 | 顯示全部樓層 |閱讀模式
尋了許久終於找到一個範例
但我不知如何能每五秒讓他自行輸出一次
請各位幫忙解惑

底下是
MT4輸出開高低收到文件(原碼範例)


  1. //+------------------------------------------------------------------+
  2. //|                                                          bbb.mq4 |
  3. //|                       Copyright ?2011, MetaQuotes Software Corp. |
  4. //|                                        http://www.metaquotes.net |
  5. //+------------------------------------------------------------------+
  6. #property copyright "Copyright ?2011, MetaQuotes Software Corp."
  7. #property link      "http://www.metaquotes.net"
  8. //+------------------------------------------------------------------+
  9. //| script program start function                                    |
  10. //+------------------------------------------------------------------+
  11. int start()
  12.   {
  13. //----
  14.   int handle;
  15.   datetime orderOpen=OrderOpenTime();
  16.   handle=FileOpen("filename.csv", FILE_CSV|FILE_WRITE, ';');
  17.   if(handle>0)
  18.     {
  19.      FileWrite(handle, Close[0], Open[0], High[0], Low[0], TimeToStr(orderOpen));
  20.      FileClose(handle);
  21.     }
  22.    
  23. //----
  24.    return(0);
  25.   }
  26. //+------------------------------------------------------------------+
複製代碼
發表於 11-5-27 12:48 | 顯示全部樓層
你直接跟我講:
你需要 什麼?
我給你 程式
 樓主| 發表於 11-5-27 13:13 | 顯示全部樓層
你直接跟我講:
你需要 什麼?
我給你 程式
無無明 發表於 11-5-27 12:48 PM


明大真是個大好人

我的構想是每五秒輸出一筆五行格式的日線





直接寫入到R:\TEST.txt
每執行一次就覆蓋掉原先的TEST.txt

請明大幫忙惠賜原碼我好加入其他數據
感恩
發表於 11-5-27 15:33 | 顯示全部樓層
不要 每5秒 太麻煩了
給你 tick by tick 的
然後 輸出檔案,不能隨意,只能放在 MT4 安裝目錄的
C:\MT4 主目錄\experts\files   底下

//=============================================================================
// tcINTickDataA.mq4  modified 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[0]));
   //} else {                            //first tick of new bar, process prior bar
   // //Print("new bar.", TimeToStr(CurTime()),"  bars: ",Bars,TimeToStr(Time[0]));
   // 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[0] = iRcdCnt;
   return(0);
}   
//--- end ---
發表於 11-5-27 15:35 | 顯示全部樓層
sFileName = StringConcatenate( "TickData\\", Symbol() + ".csv" );

這一行 控制 輸出檔案 的 目錄位置
這個代表:C:\MT4 主目錄\experts\files\TickData   底下
發表於 11-5-27 15:41 | 顯示全部樓層
如果 你要 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, ",");
 樓主| 發表於 11-5-27 18:57 | 顯示全部樓層
本帖最後由 cellan 於 11-5-27 07:02 PM 編輯

回復 6# 無無明

無大
對不起我對mt4剛接觸
我把您的原碼直接複製到ccc.mq4

可是我收尋c:\
都找無.csv 或.txt
ccc.JPG

c2.JPG
發表於 11-5-27 19:14 | 顯示全部樓層
如果 你要 5秒,變成還要去 檢查 高低 每5秒做一次 輸出
那會變成 數據失真
一般餵入數據,可以 TICK 數據 ...
無無明 發表於 11-5-27 03:41 PM



    謝謝大大分享
發表於 11-5-27 19:32 | 顯示全部樓層
本帖最後由 無無明 於 11-5-27 07:34 PM 編輯

這個程式 是 指標,不是 智能 EA
隨便 找一個  indicator 重新命名,把 程式碼 複製取代,編譯。然後
要在 1K圖 內 加入 此項指標


注意 目錄 你要 先設定好
C:\MT4 主目錄\experts\files\TickData
 樓主| 發表於 11-5-28 11:23 | 顯示全部樓層
本帖最後由 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[0]);

即可呢

因為mt4 dde無日線的開盤價
我最主要的目的只要能時時取得日線的開盤價即可
如此便可補足dde所缺的開盤價
其餘的日線高低
與現收我從dde取得就行
發表於 11-5-29 12:46 | 顯示全部樓層
本帖最後由 無無明 於 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-5-30 09:29 | 顯示全部樓層
回復 11# 無無明

已可輸出了ㄟ
無名大
如果我要強制他輸出到R:\ TEMP\   
該如何改

另請問日線增加(每日開盤)時能否讓他自動再輸出一次覆蓋原來檔案

因為開盤價是不會變動
因此我想簡略僅需開啟時輸出一次
每日開盤時固定再輸出一次覆蓋原先檔即可

謝謝無名大的幫忙
發表於 11-5-30 11:11 | 顯示全部樓層
回復 12# cellan

MT4 使用程式 輸出檔案 只能放在 C:\Program Files\FxPro - MetaTrader\experts\files\    底下
沒辦法到其他地方


你要 自己搬,畢竟開盤價 出來 之後 不會改變了
 樓主| 發表於 11-5-30 11:24 | 顯示全部樓層
回復 13# 無無明

那我就先這樣用
再次謝謝無明大的幫忙
感恩
發表於 11-5-30 11:25 | 顯示全部樓層
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

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

GMT+8, 24-11-22 02:28

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 |