MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 573

 
안녕하세요!
아마도 사이트 https://ru.investing.com/tools/correlation-calculator에서
차트에 정보를 전송하시겠습니까?
어떻게 할 수 있습니까?
미리 감사드립니다.
 
Irina Dymura :
안녕하세요!
아마도 사이트 https://ru.investing.com/tools/correlation-calculator에서
차트에 정보를 전송하시겠습니까?
어떻게 할 수 있습니까?
미리 감사드립니다.
WebRequest() 를 시도하십시오.
 
Ihor Herasko :

네. 시간은 초 단위이므로 시간 을 문자열로 변환하는 것은 의미가 없습니다. 이 숫자는 문자열보다 작업하기가 훨씬 쉽고 빠릅니다.

당신은 하나를 수정하고 다른 하나를 망쳤습니다))

대신 두 번째 부분에서:

반품:

이전 시도에서는 이 줄이 맞았습니다.


답변 감사합니다! 나는 두 가지 옵션을 모두 시도했습니다.

나는 캐치가 무엇인지 이해하지 못합니다. 모두 동일하게 정류장으로 닫을 때 즉시 입력됩니다.

릴_릴 :

큰 소리로 당신의 상태를 말하고 문제를 이해하십시오)

 if ( TimeSeconds ( TimeCurrent ()) - TimeSeconds ( OrderCloseTime ()) > TimeSeconds( 30 * 60) )
if ( TimeCurrent () - OrderCloseTime () > 30 * 60 )

이론적으로, 거기! = 내가 당신이 의미하는 바를 정확하게 이해했다면, 모든 곳에서 조건, 즉 그 반대의 경우도 마찬가지여야 합니다. 하지만 모든 옵션을 실행했습니다. 여전히 실행됩니다.

 

논리를 파악하고 오류를 찾을 수 있도록 도와주세요.

코드를 자세히 주석 처리했습니다.

또한 '지그재그' 형식에 따라 마침표가 있는 도형을 그려야 하측 상측 하측 프랙탈 이 순차적으로 가는 식으로 진행됩니다.

그러나 결과적으로 반복되는 분수는 여전히 차트를 통과합니다.

기본은 표준 프랙탈 칠면조에서 가져옵니다. 기간 5에 프랙탈이 반복된 아래 스크린샷

 //+------------------------------------------------------------------+
//|                                                     Fractals.mq5 |
//|                   Copyright 2009-2017, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009-2017, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots    2
#property indicator_type1    DRAW_ARROW
#property indicator_type2    DRAW_ARROW
#property indicator_color1   Gray
#property indicator_color2   Gray
#property indicator_label1    "Fractal Up"
#property indicator_label2    "Fractal Down"
bool high_f, low_f, lastIsUpper = true , lastIsLower = true ;
int lastLowerIndex, lastUpperIndex;
//---- input data
input int period = 5 ;
int per = period;
//---- indicator buffers
double ExtUpperBuffer[];
double ExtLowerBuffer[];
//--- 10 pixels upper from high price
int     ExtArrowShift=- 10 ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit ()
  {
   if (per % 2 == 0 ) per++; //период фракталов только нечетный
//---- indicator buffers mapping
   SetIndexBuffer ( 0 ,ExtUpperBuffer, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,ExtLowerBuffer, INDICATOR_DATA );
   IndicatorSetInteger ( INDICATOR_DIGITS , _Digits );
//---- sets first bar from what index will be drawn
   PlotIndexSetInteger ( 0 , PLOT_ARROW , 217 );
   PlotIndexSetInteger ( 1 , PLOT_ARROW , 218 );
//---- arrow shifts when drawing
   PlotIndexSetInteger ( 0 , PLOT_ARROW_SHIFT ,ExtArrowShift);
   PlotIndexSetInteger ( 1 , PLOT_ARROW_SHIFT ,-ExtArrowShift);
//---- sets drawing line empty value--
   PlotIndexSetDouble ( 0 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
   PlotIndexSetDouble ( 1 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
//---- initialization done
  }

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[])
  {
   int i,limit;
//---
   if (rates_total < per)
       return ( 0 );
//---
   if (prev_calculated < per + (per - 1 ) / 2 )
     {
      limit = (per - 1 ) / 2 ;
       //--- clean up arrays
       ArrayInitialize (ExtUpperBuffer, EMPTY_VALUE );
       ArrayInitialize (ExtLowerBuffer, EMPTY_VALUE );
     }
   else limit = rates_total - per;
   for (i = limit; i < rates_total - (per + 1 ) / 2 && ! IsStopped (); i++)
     {
      high_f = true ; low_f = true ; //с самого начала считаем что есть фрактал в i свече
       for ( int g = 1 ; g < (per+ 1 )/ 2 ; g++){ //проверка на наличие фрактала (одновременной справа и слева от свечи с возможным фракталом)
         //---- Upper Fractal
         if (high[i-g] >= high[i] || high[i+g] > high[i]){ //если одно из условий выполнено (high какой либо свечи справа или слева выше чем исследуемый), то фрактала сверху нет
            ExtUpperBuffer[i] = EMPTY_VALUE ;
            high_f = false ;            
         }        
         //---- Lower Fractal
         if (low[i-g] <= low[i] || low[i+g] < low[i]){ //если одно из условий выполнено, то фрактала снизу нет        
            ExtLowerBuffer[i] = EMPTY_VALUE ;
            low_f = false ;   
         }  
      }  
       //устанавливаем верхний
       if (high_f){ //если фрактал все таки есть (из цикла-проверки выше)
         if (lastIsLower){ //еси последний фрактал был нижний
            ExtUpperBuffer[i] = high[i]; //устанавливаем сверху
            lastUpperIndex = i; //записываем индекс в буффере установленного
            lastIsLower = false ; //говорим что последний - не нижний
            lastIsUpper = true ; //а верхний
         } else {
             if (lastIsUpper){ //если последний верхний (а мы пытаемся установить верхний)
               if (high[i] > ExtUpperBuffer[lastUpperIndex]){ //если устанавливаем выше предыдущего
                  ExtUpperBuffer[lastUpperIndex] = EMPTY_VALUE ; //удаляем предыдущий
                  ExtUpperBuffer[i] = high[i]; //устанавливаем новый
                  lastUpperIndex = i; //записываем индекс нового
               }
            }
         }
      }
       //аналогично для фрактала снизу
       if (low_f){
         if (lastIsUpper){
            ExtLowerBuffer[i] = low[i];
            lastLowerIndex = i;
            lastIsLower = true ;
            lastIsUpper = false ;
         } else {
             if (lastIsLower){
               if (low[i] < ExtLowerBuffer[lastLowerIndex]){
                  ExtLowerBuffer[lastLowerIndex] = EMPTY_VALUE ;
                  ExtLowerBuffer[i] = low[i];
                  lastLowerIndex = i;
               }
            }
         }
      }   
    }
  
//--- OnCalculate done. Return new prev_calculated.
   return (rates_total);
  }

//+------------------------------------------------------------------+
파일:
6gvzow.JPG  149 kb
 
SYMBOL_SESSION_INTEREST가 지원되지 않는 경우 MQL4에서 기호로 열린 위치 의 볼륨을 얻는 방법을 알려주십시오. 고맙습니다!
 
kotaries :
SYMBOL_SESSION_INTEREST가 지원되지 않는 경우 MQL4에서 기호로 열린 위치 의 볼륨을 얻는 방법을 알려주십시오. 고맙습니다!

모든 위치를 반복하고 총 볼륨을 계산합니다. OrderLots()

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает сумму лотов открытых позиций                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetAmountLotFromOpenPos( string sy= "" , int op=- 1 , int mn=- 1 ) {
   double l= 0 ;
   int     i, k= OrdersTotal ();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
       if ( OrderSymbol ()==sy || sy== "" ) {
         if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) {
           if (op< 0 || OrderType ()==op) {
             if (mn< 0 || OrderMagicNumber ()==mn) {
              l+= OrderLots ();
            }
          }
        }
      }
    }
  }
   return (l);
}
Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 

특정 prev_calculated 값이 반환되는 것을 기준으로 이해할 수 없습니까?

실제로 어떻게 계산됩니까

 
Roman Sharanov :

특정 prev_calculated 값이 반환되는 것을 기준으로 이해할 수 없습니까?

실제로 어떻게 계산됩니까

이 뒤에 시스템이 느려집니다. 사실, 당신은 그 가치에만 관심을 가져야 하며, 내부에서 어떻게 계산되는지는 관심을 가져야 합니다.
 
Roman Sharanov :

특정 prev_calculated 값이 반환되는 것을 기준으로 이해할 수 없습니까?

실제로 어떻게 계산됩니까

이것은 마지막 반복에서 OnCalculate() 함수 에 의해 반환된 값입니다. 이것은 문서에 직접 명시되어 있습니다.

OnCalculate() 함수에서 반환된 값과 두 번째 입력 매개변수 prev_calculated 사이의 관계에 유의하십시오. 함수를 호출할 때 prev_calculated 매개변수에는 이전 호출 에서 OnCalculate() 함수가 반환 한 값이 포함됩니다. 이를 통해 이 기능의 이전 실행 이후 변경되지 않은 막대에 대한 재계산을 피하기 위해 사용자 지정 지표를 계산하는 경제적인 알고리즘을 구현할 수 있습니다.

 

작업은 최소한의 마감이 있는 막대를 찾는 것입니다.

for(int x=0; x<=xBars -1; x++)

{

카운터++;

// Print(닫기[x],",,,",카운터);

int h = ArrayMinimum (닫기[x]);

if(카운터 > 20) 중단;

}

컴파일러는 닫기에서 맹세합니다.