cellan 發表於 11-5-27 12:16

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

你直接跟我講:
你需要 什麼?
我給你 程式

cellan 發表於 11-5-27 13:13

你直接跟我講:
你需要 什麼?
我給你 程式
無無明 發表於 11-5-27 12:48 PM http://coco-in.net/images/common/back.gif

明大真是個大好人

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





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

請明大幫忙惠賜原碼我好加入其他數據
感恩

無無明 發表於 11-5-27 15:33

不要 每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 ---

無無明 發表於 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, ",");

cellan 發表於 11-5-27 18:57

本帖最後由 cellan 於 11-5-27 07:02 PM 編輯

回復 6# 無無明

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

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


冷氣工人 發表於 11-5-27 19:14

如果 你要 5秒,變成還要去 檢查 高低 每5秒做一次 輸出
那會變成 數據失真
一般餵入數據,可以 TICK 數據 ...
無無明 發表於 11-5-27 03:41 PM http://coco-in.net/images/common/back.gif


    謝謝大大分享{:4_158:}

無無明 發表於 11-5-27 19:32

本帖最後由 無無明 於 11-5-27 07:34 PM 編輯

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


注意 目錄 你要 先設定好
C:\MT4 主目錄\experts\files\TickData

cellan 發表於 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);

即可呢

因為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 );

       }

}

cellan 發表於 11-5-30 09:29

回復 11# 無無明

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

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

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

謝謝無名大的幫忙

無無明 發表於 11-5-30 11:11

回復 12# cellan

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


你要 自己搬,畢竟開盤價 出來 之後 不會改變了

cellan 發表於 11-5-30 11:24

回復 13# 無無明

那我就先這樣用
再次謝謝無明大的幫忙
感恩

oneman001 發表於 11-5-30 11:25

{:4_628:}{:4_628:}{:4_628:}
頁: [1] 2
查看完整版本: MT4輸出開高低收到文件(原碼範例)