MQL5를 사용하는 주식 오실레이터 - 페이지 5

 
joo :

다음은 파일에서 읽는 코드입니다.

FileReadString() ?

FileReadArray ()를 사용하는 것이 더 좋지 않으면 주기가 필요하지 않습니다.

 
Serj_Che :

FileReadString() ?

FileReadArray ()를 사용하는 것이 더 좋지 않으면 주기가 필요하지 않습니다.

어쩌면 더 좋을 수도 있습니다. 너무 익숙해. :)
 

로쉬 :
지분 가치를 파일에 씁니다. 그런 다음 이 값을 기반으로 지표를 작성하십시오. 그러나 테스트하는 동안 파일이 agent_name/MQL5/Files 폴더에 기록되기 때문에 데이터 파일을 수동으로 전송해야 합니다.

모든 것이 얼마나 엉망인지 이제서야 깨달았습니다.

그러나 수백 가지 테스트에 대해 이야기하고 있기 때문에 수동으로 이 문제에 대한 솔루션이 아닙니다.

그리고 그것은 보일 것입니다 : 처음에는 사용 가능한 데이터가 있지만 - 오, 기적! -- 프로그램은 프로그래밍 방식으로 추출하여 사용할 때까지 어떻게든 어딘가에 저장할 가능성이 없도록 설계되었습니다!

저는 전문 프로그래머는 아니지만 이 상황은 제 머리에 맞지 않습니다.

거대한 문서 .., 구축의 가장 넓은 가능성, 모든 것, 모든 것 .., 메모리 관리, OOP, 그리고 여기에서 근본적으로 간단하고 결정적으로 필요한(이미 설명했길 바랍니다) - 막다른 골목.

... 그리고 아직 ... 질문!

나중에 표시기를 만드는 데 사용할 수 있는 일종의 지울 수 없는 프로그램 배열에 테스트 모드에서 쓰는 것이 정말 불가능합니까?

포함 전역 변수 를 통해 그러한 배열에 대한 포인터를 전달할 수 있습니까?

그리고 현재 구현의 관점에서가 아니라 원칙적으로 테스트 단계와 주요 작업 시간 사이에 데이터를 저장하고 전송하는 일반적인 문제는 무엇입니까?

레나트는 수백 메가 바이트의 데이터를 언급했지만, 첫째, 왜 항상 데이터를 전송하는가, 그러한 기회가 프로그래머의 직접적인 의지로만 제공 될 수 있다면, 둘째, 작업 의미에서 데이터의 양은 훨씬 적습니다. 그리고 수천 자릿수에 달합니다.

다시 한 번 사용자의 관점에서 반복 테스트 중 파일을 수동으로 전송하는 옵션(시장은 복잡성으로 인해 반복이 필요함)은 절대적으로 불편하고 유망하지 않음을 선언합니다. 동시에 저는 준비가 되어 있습니다. 테스트의 역사에서 가격의 역학과 직접적인 상관 관계가 있는 계정 잔액 지표의 역학이 일반적으로 가장 중요한 것 중 하나라고 누구와도 주장합니다.

읽기 모드에서 파일을 여는 기본 모드의 범위를 테스터의 파일 폴더로 확장하는 문제는 무엇입니까? 이것에서 가상의 위협이 될 수 있는 것은 무엇입니까?

그리고 RAM의 메인 모드와 테스트 모드 사이에 필요한 데이터를 강제로 저장할 가능성이 없다는 문제는 무엇입니까?

 

디스크에 무작위로 위치한 폴더에서 파일을 쓰고 읽으려면 dll을 사용하십시오. 파일 쓰기 및 읽기 기능을 dll로 전송하기만 하면 됩니다.

 
DV2010 :

... 그리고 아직 ... 질문!

나중에 표시기를 만드는 데 사용할 수 있는 일종의 지울 수 없는 프로그램 배열에 테스트 모드에서 쓰는 것이 정말 불가능합니까?


파일을 열 때 FILE_COMMON 플래그를 지정해 보십시오 - https://www.mql5.com/ru/docs/constants/io_constants/fileflags

식별자

의미

설명

FILE_COMMON

4096

모든 클라이언트 터미널의 공유 폴더에 있는 파일 위치. 플래그는 파일 열기( FileOpen() ), 파일 복사( FileCopy() , FileMove() ) 및 파일 존재 확인( FileIsExist() )에 사용됩니다.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы ввода/вывода / Флаги открытия файлов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы ввода/вывода / Флаги открытия файлов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы ввода/вывода / Флаги открытия файлов - Документация по MQL5
 
Rosh :

파일을 열 때 FILE_COMMON 플래그를 지정해 보십시오 - https://www.mql5.com/ru/docs/constants/io_constants/fileflags

이 스크립트를 실행하고 어디에 쓰는지 확인하십시오.

 //+------------------------------------------------------------------+
//|                                             Demo_File_Common.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link       "http://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
//--- input parameters
input string    filename = "file_common.txt" ;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   string common_folder = TerminalInfoString ( TERMINAL_COMMONDATA_PATH );
//---
   int handle= FileOpen ( filename , FILE_WRITE | FILE_COMMON );
   if (handle!= INVALID_HANDLE )
     {
       uint written= FileWrite (handle, "Общая папка всех терминалов - " ,common_folder);
       if (written> 0 )
        {
         PrintFormat ( "Записано %d байт в общую папку всех терминалов - %s" ,written,common_folder);
        }
     }
   else
     {
       Print ( "Не удалось открыть на запись файл " ,filename, ".  Ошибка " , GetLastError ());
     }

  }
//+------------------------------------------------------------------+
 

주, 래쉬, 감사합니다!

공유 폴더 옵션이 더... 통합된 것 같습니다.

놀라운 점은 이 코드가 실행될 때 쓰기 자체는 계속 수행되지만 실패한 쓰기에 대한 메시지가 표시기 내에 표시된다는 것입니다. 또한 정확히 언제 어떻게 데이터를 작성하는 것이 더 나은지에 대한 열린 질문이 있습니다(각 틱에 대해 별도로, 그러나 이것은 리소스 집약적이거나 맨 마지막에 - 전체 배열이지만 배열을 쓰는 경우에는 그렇지 않습니다. 아직은 옳고 게다가 이 경우 OnCalculated가 추출에 대해 어떻게 작용하는지 이해하기 어렵습니다. 두 번째 경우에는 테스트 후 통과로 판명됩니까?)

그리고 주제에서 다소 벗어난 또 다른 질문이지만 어제 이미 제기된 문제에 관한 것입니다.

OnTick 및 OnCalculated에 삽입:

 Print ( "ObjectsTotal =" , ObjectsTotal ( ChartID ()));
그러나 테스트가 완료된 후 열기 및 닫기 위치와 관련된 개체가 있음에도 불구하고(터미널: 차트> 개체> 개체 목록에 화살표와 선이 표시됨) 반환된 값은 어떤 이유로 0입니다.
 

가능한 한 드물게 파일에 쓰는 것이 좋으므로 전체 배열로 쓰는 것이 좋습니다. 분당 한 번만 값을 측정하십시오. 그렇지 않으면 차트에 표시하는 데 문제가 발생합니다(또한 리소스가 많이 필요함). 즉, 실행의 끝에서. 그러나 이 옵션도 가능합니다.

알고리즘은 다음과 같습니다.

1) 테스터에서 Expert Advisor를 시작했습니다.

2) 이자의 가치를 측정하였다.

3) 이 값을 파일에 씁니다 .

4) 새로운 값이 기록되었음을 의미하는 별도의 파일에 true로 기록

5) 종료 조건이 플래그가 있는 파일의 false 플래그인 무한 루프를 시작했습니다.

6) 별도의 차트에서 스크립트는 플래그가 있는 파일을 읽고 새 값이 나타나면 차트에 위험을 표시하고 파일에 false를 씁니다.


테스터의 시각적 테스트 모드는 다음과 같습니다.

조금만 기다리면 경쟁이 끝나고 아마도 더 우아하고 아름다운 솔루션이 제공 될 것입니다.

Документация по MQL5: Файловые операции / FileWrite
Документация по MQL5: Файловые операции / FileWrite
  • www.mql5.com
Файловые операции / FileWrite - Документация по MQL5
 
DV2010 :

주, 래쉬, 감사합니다!

공유 폴더 옵션이 더... 통합된 것 같습니다.

놀라운 점은 이 코드가 실행될 때 쓰기 자체는 계속 수행되지만 실패한 쓰기에 대한 메시지가 표시기 내에 표시된다는 것입니다.

나는 그런 것을 얻지 못한다. 노력하다:

 //+------------------------------------------------------------------+
//|                                   Demo_File_Common_Indicator.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link       "http://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
#property indicator_type1   DRAW_LINE
#property indicator_color1  Red

double buffer[];
input string    filename= "file_common.txt" ;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,buffer, INDICATOR_DATA );

   string common_folder= TerminalInfoString ( TERMINAL_COMMONDATA_PATH );
//---
   int handle= FileOpen (filename, FILE_WRITE | FILE_COMMON );
   if (handle!= INVALID_HANDLE )
     {
       uint written= FileWrite (handle, "Общая папка всех терминалов - " ,common_folder);
       if (written> 0 )
        {
         PrintFormat ( "Записано %d байт в общую папку всех терминалов - %s" ,written,common_folder);
        }
     }
   else
     {
       Print ( "Не удалось открыть на запись файл " ,filename, ".  Ошибка " , GetLastError ());
     }
//---
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---

//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
 

Rosh :

나는 그런 것을 얻지 못한다. 노력하다:

로쉬

, 이유가 정확히 무엇인지 이해할 수 없지만 내 표시기와 달리 귀하의 표시기로 시작할 때 메시지가 표시됩니다.

 2011.01 . 21 13 : 52 : 53      Core 1    2011.01 . 14 00 : 00 : 00    Expert removed because indicator 43 cannot load [ 4002 ]

귀하의 코드를 기반으로, 저는 이제 모든 Equity 값을 틱 단위로 파일에 기록해야 하는 유사한 가장 단순한 Expert Advisor를 만들었습니다(코드에서는 작성된 0바이트 수를 포함하여 임의의 출력만 변경했습니다. 변수는 전역으로 이동하고 파일 열기 및 쓰기를 OnInit 및 OnTick으로 이동), 그러나 쓰기 오류가 없고 파일이 생성되지만 항목과 파일은 비어 있습니다.

 #property copyright "Copyright 2010, Pavlov Sergei"
#property link       ""
#property version   "1.00"

#include <\..\Experts\_My\Classes\ClassExpert\ClassExpert.mqh>
ClassExpert Expert1;
int handle;
string common_folder;
string filename;

void OnInit (){
   Expert1.Init();
   //--
   filename= "equity.txt" ;
   common_folder= TerminalInfoString ( TERMINAL_COMMONDATA_PATH );
   int handle= FileOpen (filename, FILE_WRITE | FILE_COMMON );
}
void OnTick (){
   Expert1. OnTick ();
   //---
   if (handle!= INVALID_HANDLE ){
       uint written= FileWrite (handle, AccountInfoDouble ( ACCOUNT_EQUITY ),common_folder);
       PrintFormat ( "Expert OnTick: Записано %d байт в общую папку всех терминалов - %s" ,written,common_folder);
   }
   else {
       Print ( "Expert OnTick: Не удалось открыть на запись файл " ,filename, ".  Ошибка " , GetLastError ());
   }  
}
void OnDeinit ( const int reason){
   Expert1.Deinit();
   //---
   FileClose (filename);
}

 2011.01 . 21 14 : 00 : 46      Core 1   connect closed
2011.01 . 21 14 : 00 : 46      Core 1    log file "C:\Program Files\MetaTrader 5\Tester\Agent-127.0.0.1-3000\logs\20110121.log" written
2011.01 . 21 14 : 00 : 46      Core 1   EURUSD,H1: 5516 ticks ( 23 bars) generated within 47 ms (total bars in history 6419 , total time 3093 ms)
2011.01 . 21 14 : 00 : 46      Core 1   OnTester result 0
2011.01 . 21 14 : 00 : 46      Core 1    2011.01 . 14 23 : 59 : 59    order performed sell 0.15 at 1.33829 [ # 13 sell 0.15 EURUSD at 1.33829 ]
2011.01 . 21 14 : 00 : 46      Core 1    2011.01 . 14 23 : 59 : 59    deal performed [ # 13 sell 0.15 EURUSD at 1.33829 ]
2011.01 . 21 14 : 00 : 46      Core 1    2011.01 . 14 23 : 59 : 59    deal # 13 sell 0.15 EURUSD at 1.33829 done (based on order # 13 )
2011.01 . 21 14 : 00 : 46      Core 1    2011.01 . 14 23 : 59 : 59    position closed due end of test at 1.33829 [buy 0.15 EURUSD 1.33593 ]
2011.01 . 21 14 : 00 : 46      Core 1    2011.01 . 14 22 : 00 : 00    Expert OnTick : Записано 0 байт в общую папку всех терминалов - C:\Documents and Settings\All Users\Application Data\MetaQuotes\Terminal\Common
2011.01 . 21 14 : 00 : 46      Core 1    2011.01 . 14 21 : 00 : 00    Expert OnTick : Записано 0 байт в общую папку всех терминалов - C:\Documents and Settings\All Users\Application Data\MetaQuotes\Terminal\Common