초보자의 질문 MQL4 MT4 MetaTrader 4 - 페이지 219

 
Vitaly Muzichenko :
비탈리 무지첸코 :
 void OnTick()
  {
     ......здесь работаем с закрытием (тралом и прочим)....
if ( Hour ()>= 10 && Hour ()<11) return ( 0 );
     ......остальной код, в частности для открытия....
  }


выдает ошибку: 'return' - 'void' function returns a value Vitaly Muzichenko :
 
Oventu:
void OnTick()
  {
     ......здесь работаем с закрытием (тралом и прочим)....
if (Hour()>=10 && Hour()<11) return;
     ......остальной код, в частности для открытия....
  }
 
Vitaly Muzichenko :
비탈리 무지첸코 :
고맙습니다!
 
안녕하세요, OrdersTotal()은 어떻습니까?
나는 항상 그것이 주문 수 -1, 즉 OrdersTotal()-1을 포함하고 모든 것이 작동한다는 것을 알고 있었지만 프로그램을 작성하기 시작했고 갑자기 하나의 주문이 더 이상 고려되지 않아 OrdersTotal()을 요청했고 총 주문 수 = 3이 아니라 3-1을 제공했습니다.
무슨 일이야?

도움말의 주기에 대한 일반적인 보기:

정수 합계 = OrdersTotal ();
   for ( int pos=0;pos<total;pos++)
{
}

즉, 첫 번째 순서는 0 값으로 진행됩니다.

그러나 사실, 아니요, 첫 번째 순서는 1이므로 열거는 0이 아니라 1부터 시작해야 합니까?
메타 따옴표가 뭔가 잘못 했습니까, 아니면 제가 바보입니까?

Документация по MQL5: Торговые функции / OrdersTotal
Документация по MQL5: Торговые функции / OrdersTotal
  • www.mql5.com
Не следует путать между собой действующие отложенные ордера и позиции, которые также отображаются на вкладке "Торговля" в панели "Инструменты". Ордер – это распоряжение на проведение торговой операции, а позиция является результатом одной или нескольких сделок.
 
Maksim Mihajlov :
안녕하세요, OrdersTotal()은 어떻습니까?
나는 항상 그것이 주문 수 -1, 즉 OrdersTotal()-1을 포함하고 모든 것이 작동한다는 것을 알고 있었지만 프로그램을 작성하기 시작했고 갑자기 하나의 주문이 더 이상 고려되지 않아 OrdersTotal()을 요청했고 총 주문 수 = 3이 아닌 3-1을 제공했습니다.
무슨 일이야?

도움말의 주기에 대한 일반적인 보기:

정수 합계 = OrdersTotal ();
   for ( int pos=0;pos<total;pos++)
{
}

즉, 첫 번째 순서는 0 값으로 진행됩니다.

그러나 사실, 아니요, 첫 번째 순서는 1이므로 열거는 0이 아니라 1부터 시작해야 합니까?
메타 따옴표가 뭔가 잘못 했습니까, 아니면 제가 바보입니까?

PENDING ORDERS 및 POSITIONS가 혼합되어 있습니다. 도움말을 읽어보세요. 질문을 보다 정확하게 공식화하십시오. PENDING ORDERS 또는 POSITIONS 중에서 정확히 무엇을 계산하려고 합니까? 예, 아무 것도 변경되지 않았습니다. 첫 번째 요소 인덱스는 '0'부터 시작합니다.


추가됨: 예

예: 직위 및 보류 주문 계산

How to start with MQL5
How to start with MQL5
  • 2020.03.12
  • www.mql5.com
This thread discusses MQL5 code examples. There will be examples of how to get data from indicators, how to program advisors...
 
Vladimir Karputov :

PENDING ORDERS 및 POSITIONS가 혼합되어 있습니다. 도움말을 읽어보세요. 질문을 보다 정확하게 공식화하십시오. PENDING ORDERS 또는 POSITIONS 중에서 정확히 무엇을 계산하려고 합니까? 예, 아무 것도 변경되지 않았습니다. 첫 번째 요소 인덱스는 '0'부터 시작합니다.


추가됨: 예

예: 위치 및 보류 주문 계산

MQL5가 아니라 MQL4라는 말은 예금과 시장의 구분이 없다!

 
Maksim Mihajlov :

MQL5가 아니라 MQL4라는 말은 예금과 시장의 구분이 없다!

MQl5 포럼에 게시합니다. 당신은 메인 섹션에 씁니다. MQL5에 대한 주제를 작성하면 자연스럽게 MQL5에 대한 답변을 얻을 수 있습니다.

이전 터미널에 대한 질문은 MQL4 및 MetaTrader 4와 같은 특별 섹션에서 질문합니다. 거기에 계속 쓰세요. 질문을 옮기겠습니다.

 

그래서 두 가지 옵션을 비교했습니다. 첫 번째 옵션에서는 OrdersTotal()-1을 적용하고 처음부터 반복하기 시작했습니다. 오류가 발생했습니다.
두 번째 옵션에서는 하나에서 시작하여 전체 OrdersTotal()을 가져왔습니다. 이번에는 오류가 없습니다.

스크린샷을 보면 OrdersTotal()이 OrdersTotal()-1 이 아닌 실제 주문 수를 표시 한다는 것을 알 수 있습니다.

문제는 OrdersTotal()이 -1이 아닌 정확한 주문 수를 반환하는 이유입니다. 이것이 이와 같거나 새로운 것입니까?
실제로 이 경우 열거는 0이 아니라 1부터 시작해야 합니다!

파일:
4.png  181 kb
2.png  186 kb
 
Maksim Mihajlov :

그래서 두 가지 옵션을 비교했습니다. 첫 번째 옵션에서는 OrdersTotal()-1을 적용하고 처음부터 반복하기 시작했습니다. 오류가 발생했습니다.
두 번째 옵션에서는 하나에서 시작하여 전체 OrdersTotal()을 가져왔습니다. 이번에는 오류가 없습니다.

스크린샷을 보면 OrdersTotal()이 OrdersTotal()-1 이 아닌 실제 주문 수를 표시 한다는 것을 알 수 있습니다.

문제는 OrdersTotal()이 -1이 아닌 정확한 주문 수를 반환하는 이유입니다. 이것이 이와 같거나 새로운 것입니까?
실제로 이 경우 열거는 0이 아니라 1부터 시작해야 합니다!

내 실수를 알아차린 것 같아...
이 조건에서는 -1만큼 오프셋이 있습니다.
if (OrderSelect(i-1,SELECT_BY_POS)==true){}
어리 석음에 대해 죄송합니다. 다른 프로그램에서 한 줄을 가져 와서 오프셋에주의를 기울이지 않았습니다!

 
안녕하세요. 지표를 조정하는 데 도움이 필요합니다. 지표의 본질은 다음과 같습니다. 이전 막대에 대한 가격 인상 금액을 계산합니다. 별표 막대는 0으로 간주됩니다. 즉, 시가와 종가가 동일합니다. 컴파일시에는 에러가 안나는데 테스트를 해보면 문자의 80번째 20번째 줄에 에러가 납니다. 비뚤어진 것도 그립니다   신호선 . 하지만 이것이 메인 버퍼의 잘못된 계산에 대한 이유라고 생각합니다. 수정을 도와주세요.
//+------------------------------------------------------------------+
//|                                                         MSBB.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

#include <MovingAverages.mqh>

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1  clrGreen
#property indicator_color2  clrRed
#property  indicator_width1  1
input int            InpMSBBPeriod=3;        // Period
input ENUM_MA_METHOD InpMSBBMethod=MODE_SMA;  // Method
//--- indicator buffers
double         ExtMSBBBuffer[];
double         ExtTempBuffer[];
double         ExtPriceBuffer[];
double         ExtSignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
//--- indicator buffers mapping
   IndicatorDigits(Digits-2);
//--- drawing settings
   IndicatorBuffers(4);
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMSBBBuffer);
   SetIndexBuffer(1,ExtSignalBuffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(2,ExtTempBuffer);
   SetIndexBuffer(2,ExtPriceBuffer);
   SetIndexDrawBegin(1,InpMSBBPeriod);
//--- name for DataWindow and indicator subwindow label
   IndicatorShortName("MSBB("+IntegerToString(InpMSBBPeriod)+")");
   SetIndexLabel(0,"MSBB");
   SetIndexLabel(1,"Signal");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
   int    i;//limit;
//------
   if(rates_total<=InpMSBBPeriod || InpMSBBPeriod<=2)
      return(0);
   /*//--- counting from 0 to rates_total
      ArraySetAsSeries(ExtMSBBBuffer,false);
      ArraySetAsSeries(ExtSignalBuffer,false);
      ArraySetAsSeries(open,false);
      ArraySetAsSeries(high,false);
      ArraySetAsSeries(low,false);
      ArraySetAsSeries(close,false);*/
//---
  // limit=rates_total-prev_calculated;
   //if(prev_calculated>0)
     // limit++;
//--- typical price and its moving average
   for(i=0; i<rates_total; i++)
     {
      ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2);
      ExtPriceBuffer[i] = NormalizeDouble((close[i+1]-open[i+1])/Point(),2);
      //ExtMSBBBuffer[i]=price_open+ExtTempBuffer[i];
      //Print("ExtPriceBuffer[i] = ", ExtPriceBuffer[i]);
      if(ExtTempBuffer[i]==0)
         ExtMSBBBuffer[i]=0.0;
      if(ExtPriceBuffer[i]>0 && ExtTempBuffer[i]>0)
        {
         double price_open = NormalizeDouble((open[i]-open[i+1])/Point(),2);
         double price_close = NormalizeDouble((close[i]-close[i+1])/Point(),2);
         if((price_open<0 && price_close>0)||(price_open>0 && price_close<0))
            ExtMSBBBuffer[i] = 0.0;
         if((price_open<0 && price_close<0)||(price_open>0 && price_close>0))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
      if(ExtPriceBuffer[i]>0 && ExtTempBuffer[i]<0)
        {
         double price_open = NormalizeDouble((open[i]-close[i+1])/Point(),2);
         double price_close = NormalizeDouble((close[i]-open[i+1])/Point(),2);
         if((price_open<0 && price_close>0)||(price_open>0 && price_close<0))
            ExtMSBBBuffer[i] = 0.0;
         if((price_open>0 && price_close>0)||(price_open<0 && price_close<0))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
      if(ExtPriceBuffer[i]<0 && ExtTempBuffer[i]<0)
        {
         double price_open = NormalizeDouble((open[i]-open[i+1])/Point(),2);
         double price_close = NormalizeDouble((close[i]-close[i+1])/Point(),2);
         if((price_open<0 && price_close>0)||(price_open>0 && price_close<0))
            ExtMSBBBuffer[i]=0.0;
         if((price_open<0 && price_close<0)||(price_open>0 && price_close>0))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
      if(ExtPriceBuffer[i]<0 && ExtTempBuffer[i]>0)
        {
         double price_open = NormalizeDouble((open[i]-close[i+1])/Point(),2);
         double price_close = NormalizeDouble((close[i]-open[i+1])/Point(),2);
         if((price_open>0 && price_close<0)||(price_open<0 && price_close>0))
            ExtMSBBBuffer[i]=0.0;
         if((price_open>0 && price_close>0)||(price_open<0 && price_close<0))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
      //--- signal line counted in the 2-nd buffer
      //ExtSignalBuffer[i]=iMAOnArray(ExtMSBBBuffer,0,InpMSBBPeriod,0,InpMSBBMethod,0);
      SimpleMAOnBuffer(rates_total,prev_calculated,1,InpMSBBPeriod+2,ExtMSBBBuffer,ExtSignalBuffer);
      Print ("ExtSignalBuffer = ", ExtSignalBuffer[i]);
      //--- done
     }
   /* if(ExtPriceBuffer[i]>0||ExtPriceBuffer[i]<0)
     {
      ExtMSBBBuffer[i] = ExtPriceBuffer[i]+ExtTempBuffer[i];
      Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]);
     }
   if(ExtPriceBuffer[i]==0)
     {
      ExtMSBBBuffer[i] = 0.0;
      Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]);
     }
   }*/
//---
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
  • www.mql5.com
Некоторые технические индикаторы имеют несколько отрисовываемых на графике буферов. Нумерация индикаторных буферов начинается с 0. При копировании значений индикатора функцией CopyBuffer() в массив типа double для некоторых индикаторов можно указывать не номер копируемого буфера, а идентификатор этого буфера.