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

 
viktor :
터미널 MT4 1320의 버전을 다운로드할 수 있는 곳을 알려주세요
알파리
 

MT5의 OBV 표시기는 계산 가격 유형을 선택하는 기능이 없습니다.

MT4에는 이 기능이 있습니다.

왜요?

그리고 일반적으로 OBV는 전체 기록에 대한 전체 거래량의 합으로 계산되며, 양초가 하락한 곳은 거래량이 "음수"입니다.
그렇다면 지표 계산 을 위한 가격 유형을 선택할 수 있는 기회는 MT4에서 이러한 계산과 함께 어디에서 오는 것입니까? 계산에 포함되지 않은 경우

 

별도의 매수, 매도 주문 개수를 세는 코드 부분이 있습니다. (b - 매수 주문, s - 매도 주문)

다음으로 새 주문이 열리거나 기존 주문이 닫힐 때의 조건을 작성하고 싶습니다. 즉, 이전에 개설한 주문 수와 후속 변경 사항을 비교할 필요가 있지만 코드로 작성하는 방법을 모르겠습니다. 주문 수의 변경 사항을 저장하는 방법은 무엇입니까? 도와주세요.

이중 LB=0,LS=0;
이중 RaznSB=0, RaznBS=0;
정수 b=0,s=0;
정수 izmb=0, izms=0;
for (int i=0; i<OrdersTotal(); i++)
{
if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol())
{
int 팁 = OrderType();
if (팁==OP_BUY)
{
LB += OrderLots();
ㄴ++;
}
if (팁==OP_SELL)
{
LS += OrderLots();
s++;
}
}
}
}
if (izmb>b ||izmb<b || izms>s || izms<s) {
izmb=b;
izms=s
}
 
Roman Sharanov :

MT5의 OBV 표시기는 계산 가격 유형을 선택하는 기능이 없습니다.

MT4에는 이 기능이 있습니다.

왜요?

그리고 일반적으로 OBV는 전체 기록에 대한 전체 거래량의 합으로 계산되며, 양초가 하락한 곳은 거래량이 "음수"입니다.
그렇다면 지표 계산 을 위한 가격 유형을 선택할 수 있는 기회는 MT4에서 이러한 계산과 함께 어디에서 오는 것입니까? 계산에 포함되지 않은 경우

잘 제기된 질문에는 답변의 절반이 포함되어 있습니다.

 
scomoroh :

별도의 매수, 매도 주문 개수를 세는 코드 부분이 있습니다.

그리고 넣는 곳이 있어요)

 
Artyom Trishkin :

잘 제기된 질문에는 답변의 절반이 포함되어 있습니다.

즉, mt4 c OBV에서 가격 유형을 선택하는 것은 아무 의미가 없으며 아무 영향도 미치지 않습니까?
 
MakarFX :

그리고 넣는 곳이 있어요)

그럼 질문을 반복하겠습니다.

별도의 매수, 매도 주문 개수를 세는 코드 부분이 있습니다. (b - 매수 주문, s - 매도 주문)

또한 새로운 주문이 열리거나 기존 주문이 닫히면 작업이 계속된다는 조건을 썼습니다. 즉, 이전에 개설한 주문 수와 후속 변경 사항을 비교할 필요가 있지만 코드로 작성하는 방법을 모르겠습니다. 주문 수의 변경 사항을 저장하는 방법은 무엇입니까? 도와주세요.


    double LB= 0 ,LS= 0 ;
   int b= 0 ,s= 0 ;
   int izmb= 0 , izms= 0 ;
   
   for ( int i= 0 ; i< OrdersTotal (); i++)
   {    
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
      { 
         if (OrderSymbol()== Symbol ())
         { 
             int tip = OrderType(); 
             if (tip==OP_BUY)             
             {  
               LB  += OrderLots();
               b++; 
             }                                         
             if (tip==OP_SELL)        
             {
               LS  += OrderLots();
               s++;
            } 
         }
     }     
   }
    if (izmb>b ||izmb<b || izms>s || izms<s){ //условие сравнения количества ордеров, изменилось или нет,
    izmb=b;                                   //если изменилось то присваиваем новое значение, как его сохранить? Ведь с новым тиком
    izms=s                                    // оно опять будет равно "0"???
     }
 
Vitaly Muzichenko :

무엇이든 정적으로 만들어야합니다. 그렇지 않으면 재설정됩니다.

나는 일반적으로 플래그를 전역으로 만듭니다. 물론 함수의 본문에서 다시 선언되고 Static이 필요합니다. 하지만 왜 아무도 중괄호가 없다는 것을 눈치채지 못했는지)))) 괄호 안의 인쇄 AND 할당은 다음과 같아야 합니다)

물론 정적이 없으면 모든 함수 호출 에서 인쇄됩니다. printsimbol= ""은 NULL이 되고 기호는 현재 값으로 설정됨)

 static string symbol, printsimbol= "" ;
       long currChart= ChartFirst (); int i= 0 ;
       while (currChart>= 0 )
        {
         if ( ChartGetInteger (currChart, CHART_BRING_TO_TOP , 0 )== true ) 
           { 
             if ( ChartSymbol (currChart)!=symbol)
                {
                 symbol= ChartSymbol (currChart);
                 if (printsimbol!=symbol)
                   { Print (symbol);printsimbol=symbol;}
                }
           } 
         currChart= ChartNext (currChart);  i++;
        }
 
scomoroh :

그럼 질문을 반복하겠습니다.

별도의 매수, 매도 주문 개수를 세는 코드 부분이 있습니다. (b - 매수 주문, s - 매도 주문)

또한 새로운 주문이 열리거나 기존 주문이 닫히면 작업이 계속된다는 조건을 썼습니다. 즉, 이전에 개설한 주문 수와 후속 변경 사항을 비교할 필요가 있지만 코드로 작성하는 방법을 모르겠습니다. 주문 수의 변경 사항을 저장하는 방법은 무엇입니까? 도와주세요.


나는 그것을 시도 할 것이다

 //+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict
int izmb,izms;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- create timer
   EventSetMillisecondTimer ( 200 );

   izmb= 0 ; izms= 0 ;
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//--- destroy timer
   EventKillTimer ();
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   if (CountOrders( 0 , 0 )!=izmb){izmb=CountOrders( 0 , 0 );}
   if (CountOrders( 0 , 1 )!=izms){izms=CountOrders( 0 , 1 );}
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
//|  0 - ордера типа BUY          1 - ордера типа SELL               |
//|  2 - ордера типа BUYLIMIT     3 - ордера типа SELLLIMIT          |
//|  4 - ордера типа BUYSTOP      5 - ордера типа SELLSTOP           |
//|  6 - ордера типа Balance     -1 - Все типы ордеров               |
//+------------------------------------------------------------------+
int CountOrders( string symb= "" , int or_ty=- 1 ) 
  {
   int cnt= 0 ;
   if (symb== "0" ) symb= _Symbol ;
   for ( int pos= OrdersTotal ()- 1 ;pos>= 0 ;pos--)
     {
       if ( OrderSelect (pos,SELECT_BY_POS)== true )
        {
         if (OrderSymbol()==symb || symb== "" )
           {
             if (or_ty< 0 || or_ty==OrderType()) cnt++;
           }
        }
     }
   return (cnt);
  }
//+------------------------------------------------------------------+
 
테스터에서 EA가 잘 작동하고 주문을 하는 이유를 누가 알 수 있지만 실제 계정 에서는 로봇이 활성화되어 있어도 주문이 이루어지지 않습니다.