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

 
joo :

EA의 전역 수준에서 두 개의 배열 선언 자기자본 []과 시간[]

Expert Advisor를 테스트할 때 적절한 어레이에 자산 가치와 시간을 입력하십시오.

스크립트는 테스트 완료 시 파일을 읽고 원하는 차트에 개체를 포함하여 형평성을 구축합니다.

당신의 목적을 위해 가장 적합한 방법입니다. 왜 지표가 필요한지 이해하지 못합니다.

어, 내가 이미 한 일의 어려움이 정확히 무엇인지 명확하고 명확하게 이해할 수 있다면 택시 타기가 더 쉬울 것입니다 ...

(값을 변경하는 것은 이미 OnCalculated에 있으므로 더 필요한 것은 무엇입니까? )

이미 전역 변수 에 대해 생각했지만 정의에 따르면 다음과 같습니다.

 datetime    GlobalVariableSet (
   string   name,       // имя
   double   value       // устанавлимое значение
   );

그리고 배열을 작성하거나 적어도 Value에 대한 링크를 작성하는 방법, 그래서 나중에 거기에서 추출하는 것이 가능하도록 ... 질문.

객체의 경우 두 가지를 결합하고 싶습니다.

1. 결과에 따라 거래 라인이 표시됩니다(빨간색 - 모두 수익성 없음, 파란색 - 모두 수익성 있음)

2. 그리고 지표 하단에 초기 보증금에서 수익성 그래프를 작성합니다.

그렇지 않으면 소규모로 개체를 사용할 때 거래의 원(그런데 없애고 싶지만 방법을 모르겠습니다)조차도 가격 역학을 보기 어렵게 만듭니다.

제 경우에는 오랜 기간에 걸쳐 Expert Advisors를 테스트하는 것에 대해 이야기하고 있습니다. 정확히 그러한 곡선의 조합은 지금 이해하고 있는 바와 같이 전통적인 방식 없이도 과거에 걸쳐 손실 및 수익성 있는 거래의 분포에 대한 가장 완전한 그림을 제공할 것입니다. 각 거래에 대한 시작 방향과 이동 방향의 비교.

 

sergey1294 :
Даже не знаю как вам объяснить. AccountInfoDouble ( ACCOUNT _ EQUITY ) хранит последнее значение эквити. После тестирования как сказал Ренат индикатор инициилизируется заново и пересчитывается. По этому данные эквити накопленные в буфере индикатора за время прогона стираются.

그러나 이것은 지우기에 대해 이미 "핫"합니다!

그러나 파일 쓰기 및 읽기를 위한 더 복잡하고 리소스 집약적인 절차 없이 나중에 복원하기 위해 OnCalculated 에서 이러한 값을 표시기의 다른 관련 없는 "지울 수 없는" 배열에 쓰는 것을 방지하는 것은 무엇입니까?

아니면 이미 시스템 수준의 문제입니까(더 이상 우회할 수 없는 어레이의 강제 자동 해제)?

그런 리소스(메모리의 변수 생성 및 삭제)를 수동으로 관리할 수 있다고 읽었지만...

 
DV2010 :

어, 내가 이미 한 일의 어려움이 정확히 무엇인지 명확하고 명확하게 이해할 수 있다면 택시 타기가 더 쉬울 것입니다 ...

(값을 변경하는 것은 이미 OnCalculated에 있으므로 더 필요한 것은 무엇입니까? )

이미 전역 변수 에 대해 생각했지만 정의에 따르면 다음과 같습니다.

그리고 배열을 작성하거나 적어도 Value에 대한 링크를 작성하는 방법, 그래서 나중에 거기에서 추출하는 것이 가능하도록 ... 질문.

객체의 경우 두 가지를 결합하고 싶습니다.

1. 결과에 따라 거래 라인이 표시됩니다(빨간색 - 모두 수익성 없음, 파란색 - 모두 수익성 있음)

2. 그리고 지표 하단에 초기 보증금에서 수익성 그래프를 작성합니다.

그렇지 않으면 소규모로 개체를 사용할 때 거래의 원(그런데 없애고 싶지만 방법을 모르겠습니다)조차도 가격 역학을 보기 어렵게 만듭니다.

제 경우에는 오랜 기간에 걸쳐 Expert Advisors를 테스트하는 것에 대해 이야기하고 있습니다. 정확히 그러한 곡선의 조합은 지금 이해하고 있는 바와 같이 전통적인 방식 없이도 과거에 걸쳐 손실 및 수익성 있는 거래의 분포에 대한 가장 완전한 그림을 제공할 것입니다. 각 거래에 대한 시작 방향과 이동 방향의 비교.

터미널이 아닌 프로그램의 전역 변수를 의미했습니다.

최대 정확도(빈도)를 달성하기 위해 미세한 차트에서도 개체를 작성할 수 있습니다. 그런 다음 차트에서 개체를 읽을 때 지표로 선을 그릴 수 있습니다(지표로 그리고 싶은 엄청난 욕구가 있는 경우), 지표 설정에 수정 계수를 입력하여 모든 지표 의 자산을 볼 수 있습니다. 초기 보증금 .

다시 말하지만, 모든 선과 다이어그램은 스크립트로 작성할 수 있습니다.

 
joo :

터미널이 아닌 프로그램의 전역 변수 를 의미했습니다.

최대 정확도(빈도)를 달성하기 위해 미세한 차트에서도 개체를 작성할 수 있습니다. 그런 다음 차트에서 개체를 읽음으로써 지표로 선을 만들 수 있으며 지표 설정에 수정 요소를 입력할 수도 있으므로 모든 초기 저장소의 자산을 볼 수 있습니다.

프로그램의 전역 변수에 관해서는 - 내가 이해하는 바와 같이 표시기 코드와 Expert Advisor 코드에 전역 변수가 있을 수 있습니다.

이러한 변수 중 하나는 표시기 값의 배열로, 테스트 후 결과에 따라 어떤 이유로(분명히 시스템 계획에서) 지워집니다.

그러나 OnCalculated Indicator에서 전역 변수, 객체 또는 파일의 기록이든 Equty의 기록을 표시하기 위해 값을 취해야 한다는 것을 올바르게 이해합니다.

 
DV2010 :

그러나 OnCalculated Indicator에서 전역 변수, 개체 또는 파일의 기록이든 Equty의 기록을 표시하기 위해 값을 가져와야 한다는 것을 올바르게 이해하고 있습니까?

정확히.
 
joo :
정확히.

이 경우 프로그램의 전역 변수 를 사용할 수 있습니까?

결국 전문가의 전역 변수는 표시기에 표시되지 않으며 표시기 값의 배열과 달리 전문가의 OnCalculated 작업 후에 "지울 수 없는" 상태여야 하는 표시기의 전역 변수를 사용하는 것이 남아 있습니다. 방법?

그리고 가능하다면 현재 차트의 개체에 대한 질문입니다. 이제 그 안에 속한 개체 목록을 추출하는 방법을 찾으려고 했지만 여전히 찾기가 어렵습니다. 프로그래밍 방식으로 수행하는 방법을 알려주실 수 있습니까?

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Основы языка / Переменные / Глобальные переменные - Документация по MQL5
 
DV2010 :

그리고 가능하다면 현재 차트의 개체에 대한 질문입니다. 이제 그 안에 속한 개체 목록을 추출하는 방법을 찾으려고 했지만 여전히 찾기가 어렵습니다. 프로그래밍 방식으로 수행하는 방법을 알려주실 수 있습니까?

ObjectsTotal 함수를 사용하여 차트의 개체 수 가져오기

 int    ObjectsTotal (
   long   chart_id,     // идентификатор графика
   int    nwin=- 1 ,       // индекс окна
   int    type=- 1        // тип объекта     
   );
ChartID 를 사용하여 차트 ID 가져오기
 

대략 다음과 같습니다.

 //+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2010, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
input int TradeHistoy= 10000 ;

//Глобальные пременные
double    Equity[];
datetime EquityTime[];
int       cnt;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit ()
  {
   ArrayResize (Equity,TradeHistoy); ArrayInitialize (Equity, 0.0 );
   ArrayResize (EquityTime,TradeHistoy); ArrayInitialize (Equity, 1 );
   return ( 0 );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {

//Записать накопленные данные в файл
   D_ArrayToCsv( "DATA" ,Equity,TradeHistoy, ";" );
   D_ArrayToCsv( "TIME" ,Equity,TradeHistoy, ";" );

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick ()
  {

//В нужном месте эксперта проверить значение эквити
//записать эквити и время замера 
   if (cnt<TradeHistoy)
     {
      Equity[cnt]= AccountInfoDouble ( ACCOUNT_EQUITY );
      EquityTime[cnt]= TimeTradeServer ();
     }

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

void D_ArrayToCsv( string filename, double &mass[], int line, string Separator)
  {
// запись массива в файл
   string str;
   int handle= FileOpen (filename, FILE_CSV | FILE_WRITE ,Separator);
//Цикл записи строчек в файл
   for ( int l= 0 ;l<line;l++)
     {
      str= DoubleToString (mass[l], 8 );
       FileWrite (handle,str);
     }
   FileClose (handle);
  }
//+------------------------------------------------------------------+
그런 다음 생성된 파일을 사용하여 원하는 모든 작업을 수행할 수 있습니다.
 

개체에 대한 정보를 제공한 Rosh에게 감사합니다. 이제 이 작업을 처리할 수 있을 것 같습니다.

... 그러나 방금 마스터하려고 시도한 파일 작업으로 모든 것이 다소 혼란 스럽습니다 (사실 두려워했습니다!)

:)

몇 가지 놀라움이 있습니다.

1. 어떤 이유로 주기로 쓰기 위한 파일이 여러 값이 아닌 하나의 값만 씁니다.

2. FileWriteArray 작업 에서 포인터를 얻고 전달된 배열이 비어 있지 않은지 확인하는 데 성공했음에도 불구하고

쓰여진 요소의 수는 -1입니다.

3. 문서에 따르면 테스트 단계에서 열기 작업은 MQL5\tester\files 폴더와 주요 작업 단계(MQL5/files)에서 발생합니다. 이는 즉시 표시자가 기록된 데이터를 수신할 수 있는 방법에 대한 질문을 제기했습니다. 테스트 단계, 주요 작업 중(게다가 vesbma 폴더의 경로는 간단하지 않고 시간이 지남에 따라 변경될 가능성이 가장 높습니다 - \tester\Agent-127.0.0.1-3000\MQL5\Files)

 
DV2010 :


3. 문서에 따르면 테스트 단계에서 열기 작업은 MQL5\tester\files 폴더와 주요 작업 단계(MQL5/files)에서 발생합니다. 이는 즉시 표시자가 기록된 데이터를 수신할 수 있는 방법에 대한 질문을 제기했습니다. 테스트 단계, 주요 작업 중(게다가 vesbma 폴더의 경로는 간단하지 않고 시간이 지남에 따라 변경될 가능성이 가장 높습니다 - \tester\Agent-127.0.0.1-3000\MQL5\Files)

손잡이로 운반하십시오.

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

 void CsvTo1D_Array( string nameFile, double &array[], int line, string Separator)
{
         int end= 0 ;
         int handle= FileOpen (nameFile, FILE_CSV | FILE_READ ,Separator);

         if (handle!= 1 )
        {
                 Alert ( "Файл " ,nameFile, " не найден!" );
        }
         else
        {
                 for ( int l= 0 ;l<line;l++)
                {
                        array[l]= StringToDouble ( FileReadString (handle));
                }
                 FileClose (handle);
        }
}
//+------------------------------------------------------------------+
사유: