[ARCHIVE!] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 4. - 페이지 451

 
sss2019 :

나는 그것을 생각하고 싶지 않다는 것을 이해하지만 문제가 명확하다면 최소한 힌트를 줄 수 있습니까?

모든 코드를 제공하십시오
 
ilunga :

아니요, 데이터가 기록과 일치했다는 의미일 뿐입니다.

예를 들어 수동으로 운전할 수도 있습니다. 또는 텍스트 파일에서 작성하십시오. 또는 결제 시 수령하세요.


결국, 일부 조건부 데이터 "1.25 1.16 1.73 1.35"를 입력하더라도 몇 년 전 일부 통화의 역사에 들어갈 수 있습니다. 그러나 이것이 우리가 시계열 배열을 구성했다는 것을 의미하지는 않습니다.

원본 스크립트를 약간 수정했습니다.

1. 5개의 마지막 시가만 사용자 지정 배열에 복사했습니다.

2. Ras-Comment-oval은 5개의 복사된 시작 가격 모두에 대해 사용자 지정 배열을 받았습니다.

/+------------------------------------------------------------------------------------------+
//|                                                                ArrayGetAsSeries_плюс.mq4 |
//+------------------------------------------------------------------------------------------+
//|                         script program start function                                    |
//+------------------------------------------------------------------------------------------+
//------------------------------------ НАЧАЛО START -------------------------------------- 1 -
int start()                                           //функция start
  {                                                   //начало start
   double Timestart= GetTickCount ();                   //переменная, с помощью которой вычисляется время (в милисекундах) начала выполнения эксперта 
   double array1[];                                   //объявляем массив-приемник (массив, куда будут скопированы данные)
   int element= ArrayCopy (array1,Open, 0 , 0 , 5 );           //копируем данные по максимальным ценам в пользовательский массив (начиная с 1-о бара, а не с нулевого)
   int size= ArraySize (array1);                         //устанавливаем количество элементов массива array1
//----------------------------------------------------------------------------------------- 2 -
   Comment ( "\nФункция ArrayCopy(array1[],Open,0,0,WHOLE_ARRAY) вернула: " ,element,
           "\nФункция ArraySize(array1) вернула: " ,size,
           "\nЗначение цены открытия бара №0 равно " ,array1[ 0 ], "; Время цены открытия бара №0: " , TimeToStr ( iTime ( NULL , 0 , 0 ),TIME_DATE|TIME_MINUTES),
           "\nЗначение цены открытия бара №1 равно " ,array1[ 1 ], "; Время цены открытия бара №1: " , TimeToStr ( iTime ( NULL , 0 , 1 ),TIME_DATE|TIME_MINUTES),
           "\nЗначение цены открытия бара №2 равно " ,array1[ 2 ], "; Время цены открытия бара №2: " , TimeToStr ( iTime ( NULL , 0 , 2 ),TIME_DATE|TIME_MINUTES),
           "\nЗначение цены открытия бара №3 равно " ,array1[ 3 ], "; Время цены открытия бара №3: " , TimeToStr ( iTime ( NULL , 0 , 3 ),TIME_DATE|TIME_MINUTES),
           "\nЗначение цены открытия бара №4 равно " ,array1[ 4 ], "; Время цены открытия бара №4: " , TimeToStr ( iTime ( NULL , 0 , 4 ),TIME_DATE|TIME_MINUTES),
           "\nФункция ArrayGetAsSeries(array1) вернула: " , ArrayGetAsSeries (array1),
           "\nСкрипт выполнялся всего " , GetTickCount ()-Timestart, " миллисекунд, из них: " , MathFloor (( GetTickCount ()-Timestart)/ 1000 ),
           " секунд " ,(( GetTickCount ()-Timestart)/ 1000 - MathFloor (( GetTickCount ()-Timestart)/ 1000 ))* 1000 , " миллисекунд" ); //печать 
           //сообщения на экран
//----------------------------------------------------------------------------------------- 3 -
   return ( 0 );                                                             //выход из start
  }                                                                       //конец start
//-------------------------------------- КОНЕЦ START -------------------------------------- 4 -

이것을 얻었다:


그림에서 알 수 있듯이, 시가는 역순으로 지수화됩니다(바의 시가의 NUMBER(ASCREASING 순서) 및 바의 시가의 TIME(DESCENDING 순서)), 즉 배열은 시계열 배열로 구성됩니다.

그러나 ArrayGetAsSeries 함수는 여전히 0(거짓)을 반환합니다. 이는 사용자 지정 배열이 시계열 배열로 구성되지 않았음을 의미합니다.

해명해달라고

질문 : 어떻게 설명할 것인가?

PS 제 질문에 답변해 주셔서 감사합니다.

 
7777877 :

원본 스크립트를 약간 수정했습니다.

1. 5개의 마지막 시가만 사용자 지정 배열에 복사했습니다.

2. Ras-Comment-oval은 5개의 복사된 시작 가격 모두에 대해 사용자 지정 배열을 받았습니다.

이것을 얻었다:

그림에서 알 수 있듯이, 시가는 역순으로 지수화됩니다(바의 시가의 NUMBER(ASCREASING 순서) 및 바의 시가의 TIME(DESCENDING 순서)), 즉 배열은 시계열 배열로 구성됩니다.

그러나 ArrayGetAsSeries 함수는 여전히 0(거짓)을 반환합니다. 이는 사용자 지정 배열이 시계열 배열로 구성되지 않았음을 의미합니다.

해명해달라고

질문 : 어떻게 설명할 것인가?

PS 제 질문에 답변해 주셔서 감사합니다.

기능을 시도하지 않았습니다.

bool ArraySetAsSeries ( 무효 배열[], 부울 세트)
배열의 인덱싱 방향을 설정합니다. set TRUE 매개변수 의 값은 역순으로 인덱싱 방향을 설정합니다. 즉, 마지막 요소의 인덱스는 0입니다. FALSE 값은 일반 인덱싱 방향을 설정합니다. 함수는 이전 상태를 반환합니다.
옵션:
정렬[] - 설정할 숫자 배열입니다.
세트 - 배열 인덱싱의 방향입니다.
 
Vinin :

기능을 시도하지 않았습니다.

bool ArraySetAsSeries ( 무효 배열[], 부울 세트)
배열의 인덱싱 방향을 설정합니다. set TRUE 매개변수 의 값은 역순으로 인덱싱 방향을 설정합니다. 즉, 마지막 요소의 인덱스는 0입니다. FALSE 값은 일반 인덱싱 방향을 설정합니다. 함수는 이전 상태를 반환합니다.
옵션:
정렬[] - 설정할 숫자 배열입니다.
세트 - 배열 인덱싱의 방향입니다.

이 단계에서 제 목표는 이 또는 저 함수가 어떻게 작동하는지, 이 특별한 경우 에는 ArrayGetAsSeries 함수가 어떻게 작동하는지 이해하는 것입니다. 시계열 배열에서와 같이 인덱싱을 강제 실행하는 set=true 매개변수와 함께 ArraySetAsSeries 함수를 사용할 수 있다는 것을 알고 있습니다. 그러나 내 경우에는 배열이 시계열처럼 보이지만(즉, 시계열처럼 인덱싱됨) ArrayGetAsSeries 함수가 0을 반환한 이유를 이해하고 싶습니다.
 
Sepulca :


i_maTF == 마침표() ??????,

i_maPeriod는 합리적인 값을 취합니다???

글쎄, 아마도 i_maShiftByPrice에 문제가 있습니까???

정확히 말씀드리기 어렵습니다.

잘못된 정보를 표시합니다. 전체 코드는 다음과 같습니다.

#property copyright "hoz"
#property link       ""
#include <stderror.mqh>
#include <stdlib.mqh>

extern string   h1 = "основные параметры машки" ;
extern int      i_maTF = 0 ;
extern int      i_maPeriod = 50 ;
extern int      i_maShiftByPrice = 0 ;
extern int      i_maMethod = 0 ;
extern int      i_maPrice = 0 ;
extern int      i_shiftBarsBack1 = 1 ;                         // Первое значение shift
extern int      i_shiftBarsBack2 = 49 ;                       // Второе значение shift
extern string   h2 = "===============================" ;

string          h3 = "Значения цены и времени в точках А и В гипотенузы" ;
double          price1,                                       // Цена в точке А
               price2,                                       // Цена в точке В
               time1,                                       // Время в точке А
               time2,                                       // Время в точке В
string          h4 = "Переменые массивов цены и времени в точках А и В гипотенузы" ;
double          varsPrice1[ 100 ],                             // Буфер для цены в точке А
               varsPrice2[ 100 ],                             // Буфер для цены в точке В
               varsTime1[ 100 ],                               // Буфер для времени в точке А
               varsTime2[ 100 ],                               // Буфер для времени в точке В

#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 Red
//+------------------------------------------------------------------+
//|               Функция инициализации индикатора                   |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorDigits ( MarketInfo ( Symbol (),MODE_DIGITS));
   SetIndexBuffer ( 0 ,varsAngle);                           // Связываем массив значений угла с буфером
   SetIndexStyle ( 0 , DRAW_HISTOGRAM ); 
   
// -------------- блок инициализации закончен ----------------------
   return ( 0 );
  }
//+------------------------------------------------------------------+
//|              Функция деинициализации индикатора                  |
//+------------------------------------------------------------------+
int deinit()
  {

// -------------- блок деинициализации закончен ----------------------
   return ( 0 );
  }
//+------------------------------------------------------------------+
//|                  Функция итерации эксперта                       |
//+------------------------------------------------------------------+
int start()
  {
   int i, countedBars = IndicatorCounted ();
   int limit = Bars - countedBars;
   if (limit > 100 ) limit = 100 ;
        
   for (i = limit - 1 ;i > 0 ;i--)
    {
      price1 = iMA ( Symbol (),i_maTF,i_maPeriod,i_maShiftByPrice,i_maMethod,i_maPrice,i_shiftBarsBack1+i);       // Цена в точке А
      price2 = iMA ( Symbol (),i_maTF,i_maPeriod,i_maShiftByPrice,i_maMethod,i_maPrice,i_shiftBarsBack2+i);       // Цена в точке В
      time1 = iTime ( Symbol (), Period (),i_shiftBarsBack1 + i - 1 );                                               // Время в точке А
      time2 = iTime ( Symbol (), Period (),i_shiftBarsBack2 + i - 1 );                                               // Время в точке В
    
       Print ( "i = " , i, " i_maTF = " , i_maTF, " i_maPeriod = " , i_maPeriod, " i_maShiftByPrice " , i_maShiftByPrice, " i_maMethod = " , i_maMethod, " i_maPrice = " , i_maPrice, " i_shiftBarsBack1 = " , i_shiftBarsBack1);
       string error = GetMyLastError2();
      
   //    Print("vars", DoubleToStr(price1,5));
     //  Print("vars", DoubleToStr(varsPrice1[i],5));
      
      varsPrice1[i] = price1;                                                                         // Массив цен в точке А
      varsPrice2[i] = price2;                                                                         // Массив цен в точке В
      varsTime1[i] = time1;                                                                           // Массив времени в точке А
      varsTime2[i] = time2;                                                                           // Массив времени в точке В
    
   
   //    Print("vars", DoubleToStr(varsPrice1[i],5));

            
       double d = ( MathAbs (varsTime1[i] - varsTime2[i]))* 1.0 ;
       double h = ( MathAbs (varsPrice1[i] - varsPrice2[i]));
      
   //    Print("d = ", d, " h = ", h);
      
       double angle = h/d;
      varsAngle[i] = angle;
    }
   return ( 0 );
  }
  
string GetMyLastError2()
  {
     int err = GetLastError ();
     string serr = ErrorDescription(err);
     return (serr);
  }

/* //+------------------------------------------------------------------+
//|                  Функция рассчёта тангенса угла                  |
//+------------------------------------------------------------------+
double TanA(double d, double h)
 {
   double angle = h/d;
   
  return(0);
 }
// -------------- блок деинициализации закончен ---------------------- */

전문가 로그에서 다음을 제공합니다.







14 : 50 : 36 2010.08 . 11 12 : 30   AngleByTg GBPUSD,M15: i = 25 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14 : 50 : 36 2010.08 . 11 12 : 30   AngleByTg GBPUSD,M15: i = 24 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14 : 50 : 36 2010.08 . 11 12 : 30   AngleByTg GBPUSD,M15: i = 23 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14 : 50 : 36 2010.08 . 11 12 : 30   AngleByTg GBPUSD,M15: i = 22 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14 : 50 : 36 2010.08 . 11 12 : 30   AngleByTg GBPUSD,M15: i = 21 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14 : 50 : 36 2010.08 . 11 12 : 30   AngleByTg GBPUSD,M15: i = 20 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14 : 50 : 36 2010.08 . 11 12 : 30   AngleByTg GBPUSD,M15: i = 19 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14 : 50 : 36 2010.08 . 11 12 : 30   AngleByTg GBPUSD,M15: i = 18 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14 : 50 : 36 2010.08 . 11 12 : 30   AngleByTg GBPUSD,M15: i = 17 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14 : 50 : 36 2010.08 . 11 12 : 30   AngleByTg GBPUSD,M15: i = 16 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14 : 50 : 36 2010.08 . 11 12 : 30   AngleByTg GBPUSD,M15: i = 15 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14 : 50 : 36 2010.08 . 11 12 : 30   AngleByTg GBPUSD,M15: i = 14 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14 : 50 : 36 2010.08 . 11 12 : 30   AngleByTg GBPUSD,M15: i = 13 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14 : 50 : 36 2010.08 . 11 12 : 30   AngleByTg GBPUSD,M15: i = 12 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14 : 50 : 36 2010.08 . 11 12 : 30   AngleByTg GBPUSD,M15: i = 11 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14 : 50 : 36 2010.08 . 11 12 : 30   AngleByTg GBPUSD,M15: i = 10 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14 : 50 : 36 2010.08 . 11 12 : 30   AngleByTg GBPUSD,M15: i = 9 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14 : 50 : 36 2010.08 . 11 12 : 30   AngleByTg GBPUSD,M15: i = 8 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14 : 50 : 36 2010.08 . 11 12 : 30   AngleByTg GBPUSD,M15: i = 7 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14 : 50 : 36 2010.08 . 11 12 : 30   AngleByTg GBPUSD,M15: i = 6 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14 : 50 : 36 2010.08 . 11 12 : 30   AngleByTg GBPUSD,M15: i = 5 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14 : 50 : 36 2010.08 . 11 12 : 30   AngleByTg GBPUSD,M15: i = 4 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14 : 50 : 36 2010.08 . 11 12 : 30   AngleByTg GBPUSD,M15: i = 3 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14 : 50 : 36 2010.08 . 11 12 : 30   AngleByTg GBPUSD,M15: i = 2 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14 : 50 : 36 2010.08 . 11 12 : 30   AngleByTg GBPUSD,M15: i = 1 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7

보시다시피 i_maTF, i_maPeriodi_maPrice 변수 는 초기화한 것과 동일하지 않습니다. 뭐가 문제 야?

 
hoz :

잘못된 정보를 표시합니다. 전체 코드는 다음과 같습니다.

전문가 로그에서 다음을 제공합니다.

보시다시피 i_maTF, i_maPeriodi_maPrice 변수 는 초기화한 것과 동일하지 않습니다. 뭐가 문제 야?

제공한 코드가 컴파일되지 않는 경우 어떻게 로그에 아무것도 기록하지 않았는지 궁금합니다???

그리고 그것을 컴파일하면 이상한 것이 없을 것입니다.

파일:
hoz_1.mq4  4 kb
 
TarasBY :

제공한 코드가 컴파일되지 않는 경우 어떻게 로그에 아무것도 기록하지 않았는지 궁금합니다???

그리고 컴파일하면 이상한 일이 없을 것입니다.

나는 항상 모든 것을 정상적으로 컴파일합니다.

다른 사람에게 혼동을 주지 않도록 불필요한 인쇄물과 변수에서 코드를 정리했습니다. 하지만 아래에서는 보기 위해 제거하지 않았으므로 컴파일하지 않았습니다. 다음은 컴파일되는 전체 코드입니다.

 //+------------------------------------------------------------------+
//|                                                    AngleByTg.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link       ""
#include <stderror.mqh>
#include <stdlib.mqh>

extern string   h1 = "основные параметры машки" ;
extern int      i_maTF = 0 ;
extern int      i_maPeriod = 50 ;
extern int      i_maShiftByPrice = 0 ;
extern int      i_maMethod = 0 ;
extern int      i_maPrice = 0 ;
extern int      i_shiftBarsBack1 = 1 ;                         // Первое значение shift
extern int      i_shiftBarsBack2 = 49 ;                       // Второе значение shift
extern string   h2 = "===============================" ;

string          h3 = "Значения цены и времени в точках А и В гипотенузы" ;
double          price1,                                       // Цена в точке А
               price2,                                       // Цена в точке В
               time1,                                       // Время в точке А
               time2,                                       // Время в точке В
               angle;                                       // Значение возвращаемой тангенсом
string          h4 = "Переменые массивов цены и времени в точках А и В гипотенузы" ;
double          varsPrice1[ 100 ],                             // Буфер для цены в точке А
               varsPrice2[ 100 ],                             // Буфер для цены в точке В
               varsTime1[ 100 ],                               // Буфер для времени в точке А
               varsTime2[ 100 ],                               // Буфер для времени в точке В
               varsAngle[ 100 ];                               // Буфер для хранения значение угла

#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 Red
//#property indicator_minimum -90
//#property indicator_maximum 90
//+------------------------------------------------------------------+
//|               Функция инициализации индикатора                   |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorDigits ( MarketInfo ( Symbol (),MODE_DIGITS));
   SetIndexBuffer ( 0 ,varsAngle);                           // Связываем массив значений угла с буфером
   SetIndexStyle ( 0 , DRAW_HISTOGRAM ); 
   
// -------------- блок инициализации закончен ----------------------
   return ( 0 );
  }
//+------------------------------------------------------------------+
//|              Функция деинициализации индикатора                  |
//+------------------------------------------------------------------+
int deinit()
  {

// -------------- блок деинициализации закончен ----------------------
   return ( 0 );
  }
//+------------------------------------------------------------------+
//|                  Функция итерации эксперта                       |
//+------------------------------------------------------------------+
int start()
  {
 //   if (!isNewBar())
 //   return(0);
    
   int i, countedBars = IndicatorCounted ();
   int limit = Bars - countedBars;
   if (limit > 100 ) limit = 100 ;
        
   for (i = limit - 1 ;i > 0 ;i--)
    {
      price1 = iMA ( Symbol (),i_maTF,i_maPeriod,i_maShiftByPrice,i_maMethod,i_maPrice,i_shiftBarsBack1+i);       // Цена в точке А
      price2 = iMA ( Symbol (),i_maTF,i_maPeriod,i_maShiftByPrice,i_maMethod,i_maPrice,i_shiftBarsBack2+i);       // Цена в точке В
      time1 = iTime ( Symbol (), Period (),i_shiftBarsBack1 + i - 1 );                                               // Время в точке А
      time2 = iTime ( Symbol (), Period (),i_shiftBarsBack2 + i - 1 );                                               // Время в точке В
    
       Print ( "i = " , i, " i_maTF = " , i_maTF, " i_maPeriod = " , i_maPeriod, " i_maShiftByPrice " , i_maShiftByPrice, " i_maMethod = " , i_maMethod, " i_maPrice = " , i_maPrice, " i_shiftBarsBack1 = " , i_shiftBarsBack1);
       string error = GetMyLastError2();
      
      
//      Print("i = ", i," time1 = ", time1, " price1 = ", price1);
   //    Print("vars", DoubleToStr(price1,5));
     //  Print("vars", DoubleToStr(varsPrice1[i],5));
      
      varsPrice1[i] = price1;                                                                         // Массив цен в точке А
      varsPrice2[i] = price2;                                                                         // Массив цен в точке В
      varsTime1[i] = time1;                                                                           // Массив времени в точке А
      varsTime2[i] = time2;                                                                           // Массив времени в точке В
    
   
   //    Print("vars", DoubleToStr(varsPrice1[i],5));
    
       //Print("i = ", i," time1 = ", time1, " price1 = ", price1);
     //  Print("i = ", i," time2 = ", time2, " price2 = ", price2);
   //    Print("i = ", i," varsTime1[i] = ", varsTime1[i], " varsPrice1[i] = ", varsPrice1[i]);
     // Print("i = ", i," varsTime2[i] = ", varsTime2[i], " varsPrice2[i] = ", varsPrice2[i]);
            
       double d = ( MathAbs (varsTime1[i] - varsTime2[i]))* 1.0 ;
       double h = ( MathAbs (varsPrice1[i] - varsPrice2[i]));
      
   //    Print("d = ", d, " h = ", h);
      
       double angle = h/d;
      varsAngle[i] = angle;
      
 //     Print("i = ", i," varsAngle[i] = ", varsAngle[i]);
    }
   return ( 0 );
  }
  
string GetMyLastError2()
  {
     int err = GetLastError ();
     string serr = ErrorDescription(err);
     return (serr);
  }

/* //+------------------------------------------------------------------+
//|                  Функция рассчёта тангенса угла                  |
//+------------------------------------------------------------------+
double TanA(double d, double h)
 {
   double angle = h/d;
   
  return(0);
 }
// -------------- блок деинициализации закончен ---------------------- */
파일:
anglebytg.mq4  6 kb
 

도와주세요, 제발! Expert Advisor에서 새 주문이 열리면 이전 주문이 닫히도록 하는 방법은 무엇입니까? 테스터에서는 잘 되는데 실제로는 어째서인지 새것을 열면 예전것이 떠요???????? 프로그래밍에서 마침내 0을 만들 수 있습니다(((

//---- input parameters
//ooooooooooooooooooooooooooooooooooooooooooooooooo
extern bool In_BUY=true;
extern int SL_buy=62; //---входные параметры по лонгам
extern int Risk_buy=0;
//ooooooooooooooooooooooooooooooooooooooooooooooooo
extern bool In_SELL=true;
extern int SL_sell=62; //---входные параметры по шортам
extern int Risk_sell=0;
//ooooooooooooooooooooooooooooooooooooooooooooooooo

//---- other parameters
static int prevtime=0;
int ticket=0;
int x=1;
//----------------------------------------------
int Magic_BUY =123;
int Magic_SELL =321;


//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
if(Digits == 5) x=10;
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//oooooooooooooooooooooooooooooooooooooooooooooooooooo
if (Time[0] == prevtime) return(0);
prevtime = Time[0];
if (!IsTradeAllowed()) {
prevtime=Time[1]; MathSrand(TimeCurrent());Sleep(30000 + MathRand()); //--- формировка бара---
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO


Trade( Magic_BUY, In_BUY,Ask,0,2, SL_buy, Risk_buy); //---торговля по лонгам


Trade(Magic_SELL,In_SELL,Bid,2,0, SL_sell,Risk_sell); //---торговля по шортам


//ooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
return(0);//-----------выход из стартовой функции------------
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
void Trade(int mn,bool flag,double price,int period_1,int period_2,int sl,int Risk) {

int total=OrdersTotal();

for (int i = 0; i < total; i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES);//---проход по ордерам--


if (OrderSymbol() == Symbol() && OrderMagicNumber() == mn) {

if(Open[period_2]>Open[period_1]) { //----условие закрытия ордера---------

OrderClose(OrderTicket(),OrderLots(),price,5*x); RefreshRates();

}

return(0);
}
}

//ooooooooooooooooooooooooooooooooooooooooooooooooooo
ticket = -1;



if ( flag &&

Open[period_1]>Open[period_2] && //----вход в рынок по условию---


OrdersTotal()<2 && //-----ограничения чемпионата------

AccountEquity()>200 &&

IsTradeAllowed()) {

if (mn<200) {

ticket= OrderSend(Symbol(), OP_BUY,lot(Risk_buy),Ask,5,Bid-x*sl*Point,0,DoubleToStr(mn,0),mn,0,Blue);


}


else {

ticket= OrderSend(Symbol(),OP_SELL,lot(Risk_sell),Bid,5,Ask+x*sl*Point,0,DoubleToStr(mn,0),mn,0, Red);

}


RefreshRates();

if ( ticket < 0) { Sleep(30000); prevtime = Time[1]; }

} //-- Exit ---

return(0); }


//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
double lot(int R) { if (R<0)R=0; if (R>80)R=80; //------корректность ввода -------
double minlot = MarketInfo(Symbol(), MODE_MINLOT);
int o = MathAbs(MathLog(minlot) *0.4343) + 0.5;
double lot = minlot;
//ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
lot = NormalizeDouble(AccountFreeMargin() * 0.00001*R, o);//---
if (AccountFreeMargin() < lot * MarketInfo(Symbol(), MODE_MARGINREQUIRED)) {
lot = NormalizeDouble(AccountFreeMargin() / MarketInfo(Symbol(), MODE_MARGINREQUIRED), o);
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
if(lot < minlot) lot = minlot;
double maxlot =MarketInfo(Symbol(), MODE_MAXLOT);
if(lot > maxlot) lot = maxlot;
return(lot); }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_end_film_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

또는 1개 열림, 2개 열림-1개 닫힘, 3개 열림-2개 닫힘 등의 원칙에 따라 작동하는 다른 어드바이저를 작성하는 것이 가능합니다. 도움이 매우 필요합니다!
 
al7bar :

도와주세요, 제발! Expert Advisor에서 새 주문이 열리면 이전 주문이 닫히도록 하는 방법은 무엇입니까? 테스터에서는 잘 되는데 실제로는 어째서인지 새것을 열면 예전것이 떠요???????? 프로그래밍에서 마침내 0을 만들 수 있습니다(((

//---- input parameters
//ooooooooooooooooooooooooooooooooooooooooooooooooo
extern bool In_BUY=true;
extern int SL_buy=62; //---входные параметры по лонгам
extern int Risk_buy=0;

바꾸다

 if (Open[period_2]>Open[period_1]) { //----условие закрытия ордера---------

 OrderClose ( OrderTicket (), OrderLots (),price, 5 *x); RefreshRates (); 

 }

 if (Open[period_2]>Open[period_1]) { //----условие закрытия ордера---------

 OrderClose ( OrderTicket (), OrderLots (), OrderClosePrice (), 5 *x); RefreshRates (); 

 }
 
7777877 :
이 단계에서 제 목표는 이 또는 저 함수가 어떻게 작동하는지, 그리고 이 특별한 경우에는 ArrayGetAsSeries 함수가 어떻게 작동하는지 이해하는 것입니다. 시계열 배열에서와 같이 인덱싱을 강제하는 set=true 매개변수와 함께 ArraySetAsSeries 함수를 사용할 수 있다는 것을 알고 있습니다. 그러나 내 경우에는 배열이 시계열처럼 보이지만(즉, 시계열처럼 인덱싱됨) ArrayGetAsSeries 함수가 0을 반환한 이유를 이해하고 싶습니다.

시계열처럼 보이기 때문입니다.

이것은 당신의 개인적인 의견일 뿐입니다. 그리고 거기에서 숫자 1, 2, 1.2, 2.1에 점수를 매기면 1927년 돼지고기 시계열로 이동하게 됩니다(숫자는 임의적임). 그러나 이것은 배열을 시계열로 만들지 않습니다. 해당 함수를 사용하여 명시적으로 지정해야 합니다.

사유: