당사 팬 페이지에 가입하십시오
- 조회수:
- 6112
- 평가:
- 게시됨:
- 2013.04.10 13:09
- 업데이트됨:
- 2016.11.22 07:32
-
이 코드를 기반으로 한 로봇이나 지표가 필요하신가요? 프리랜스로 주문하세요 프리랜스로 이동
The indicator reads signals to buy and sell from the file located in the subdirectory of the local terminal folder and then displays these signals in the form of up and down directed arrows. To get the file with signals you need preliminary run the Demo_FileWrite script. The terminal local folder location can be obtained calling the TerminalInfoString() function.
PrintFormat("The path to the terminal local folder: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));To get data in addition to the FileReadDatetime() function, the indicator also uses the FileReadNumber() and the FileReadBool() functions.
Code:
#property indicator_chart_window #property indicator_buffers 2 #property indicator_plots 2 //---- plot Label1 #property indicator_label1 "UpSignal" #property indicator_type1 DRAW_ARROW #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 4 //---- plot Label2 #property indicator_label2 "DownSignal" #property indicator_type2 DRAW_ARROW #property indicator_color2 clrRed #property indicator_style2 STYLE_SOLID #property indicator_width2 4 //--- parameters for reading data input string InpFileName="MACD.csv"; // file name input string InpDirectoryName="Data"; // directory name //--- global variables int ind=0; // index double upbuff[]; // indicator buffer of up arrows double downbuff[]; // indicator buffer of down arrows bool sign_buff[]; // signal array (true - buy, false - sell) datetime time_buff[]; // array of signals arrival time int size=0; // size of signal arrays //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- open the file ResetLastError(); int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_CSV); if(file_handle!=INVALID_HANDLE) { PrintFormat("%s file is open for reading",InpFileName); //--- first, read the number of signals size=(int)FileReadNumber(file_handle); //--- allocate memory for the arrays ArrayResize(sign_buff,size); ArrayResize(time_buff,size); //--- read data from the file for(int i=0;i<size;i++) { //--- signal time time_buff[i]=FileReadDatetime(file_handle); //--- signal value sign_buff[i]=FileReadBool(file_handle); } //--- close the file FileClose(file_handle); } else { PrintFormat("Failed to open %s file, Error code = %d",InpFileName,GetLastError()); return(INIT_FAILED); } //--- binding the arrays SetIndexBuffer(0,upbuff,INDICATOR_DATA); SetIndexBuffer(1,downbuff,INDICATOR_DATA); //--- set the symbol code for drawing in PLOT_ARROW PlotIndexSetInteger(0,PLOT_ARROW,241); PlotIndexSetInteger(1,PLOT_ARROW,242); //---- set the indicator values that will not be seen in the chart PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0); PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { ArraySetAsSeries(time,false); ArraySetAsSeries(high,false); ArraySetAsSeries(low,false); //--- the loop for the bars that have not been handled yet for(int i=prev_calculated;i<rates_total;i++) { //--- default value is 0 upbuff[i]=0; downbuff[i]=0; //--- check if any data is still present if(ind<size) { for(int j=ind;j<size;j++) { //--- if dates coincide, use the value from the file if(time[i]==time_buff[j]) { //--- draw the arrow according to the signal if(sign_buff[j]) upbuff[i]=high[i]; else downbuff[i]=low[i]; //--- increase the counter ind=j+1; break; } } } } //--- return value of prev_calculated for next call return(rates_total); }
MetaQuotes Ltd에서 러시아어로 번역함.
원본 코드: https://www.mql5.com/ru/code/1627

The script demonstrates the example of using the FileWrite() function

Alternative trend indicator based on the breakthrough pattern of closing the previous bars extremums

The script demonstrates the example of using the FileWriteDouble() function

The indicator demonstrates the example of using the FileReadDouble() function