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

 

iCustom을 통해 표시기에 동적 입력 매개변수를 전달할 수 있습니까? 이 작업을 수행하려고 하면 각각의 새 동적 입력 매개변수에 대해 새 표시기 창이 열립니다.

   if (NewBarCur())BulsPeriod++;
   double sep_window= iCustom ( Symbol (), PERIOD_CURRENT , "Bulls" ,BulsPeriod, 0 , 0 );
 
그리고 그런 질문, 예를 들어 테스트 차트가 끝날 때까지 1 bar 또는 3 분이 남았다는 것을 어떻게 든 알 수 있습니까?
 
Artyom Trishkin :

이 스레드에서 저는 새로운 MQL4에서 프로그래밍을 정말로 이해하고 배우고 싶어하고 MQL5로 쉽게 전환하고자 하는 사람들을 돕기 시작하고 싶습니다. 언어는 매우 유사합니다.

여기에서 작업, 이를 해결하기 위한 알고리즘, 그리고 어떤 식으로든 MT용 프로그래밍과 관련된 모든 질문에 대해 논의할 수 있습니다.

포럼의 다른 경험 많은 회원이 문제를 해결하고 스레드가 모든 사람의 관심을 끌 수 있기를 바랍니다.


Artyom Trishkin :

이 스레드에서 저는 새로운 MQL4에서 프로그래밍을 정말로 이해하고 배우고 싶어하고 MQL5로 쉽게 전환하고자 하는 사람들을 돕기 시작하고 싶습니다. 언어는 매우 유사합니다.

여기에서 작업, 이를 해결하기 위한 알고리즘, 그리고 어떤 식으로든 MT용 프로그래밍과 관련된 모든 질문에 대해 논의할 수 있습니다.

포럼의 다른 경험 많은 회원이 문제를 해결하고 스레드가 모든 사람의 관심을 끌 수 있기를 바랍니다.


Artyom Trishkin :

이 스레드에서 저는 새로운 MQL4에서 프로그래밍을 정말로 이해하고 배우고 싶어하고 MQL5로 쉽게 전환하고자 하는 사람들을 돕기 시작하고 싶습니다. 언어는 매우 유사합니다.

여기에서 작업, 이를 해결하기 위한 알고리즘, 그리고 어떤 식으로든 MT용 프로그래밍과 관련된 모든 질문에 대해 논의할 수 있습니다.

포럼의 다른 경험 많은 회원이 문제를 해결하고 스레드가 모든 사람의 관심을 끌 수 있기를 바랍니다.


Artyom Trishkin :

이 스레드에서 저는 새로운 MQL4에서 프로그래밍을 정말로 이해하고 배우고 싶어하고 MQL5로 쉽게 전환하고자 하는 사람들을 돕기 시작하고 싶습니다. 언어는 매우 유사합니다.

여기에서 작업, 이를 해결하기 위한 알고리즘, 그리고 어떤 식으로든 MT용 프로그래밍과 관련된 모든 질문에 대해 논의할 수 있습니다.

포럼의 다른 경험 많은 회원이 문제를 해결하고 스레드가 모든 사람의 관심을 끌 수 있기를 바랍니다.


Artyom Trishkin :

이 스레드에서 저는 새로운 MQL4에서 프로그래밍을 정말로 이해하고 배우고 싶어하고 MQL5로 쉽게 전환하고자 하는 사람들을 돕기 시작하고 싶습니다. 언어는 매우 유사합니다.

여기에서 작업, 이를 해결하기 위한 알고리즘, 그리고 어떤 식으로든 MT용 프로그래밍과 관련된 모든 질문에 대해 논의할 수 있습니다.

포럼의 다른 경험 많은 회원이 문제를 해결하고 스레드가 모든 사람의 관심을 끌 수 있기를 바랍니다.


아르티옴

Artyom Trishkin :

이 스레드에서 저는 새로운 MQL4에서 프로그래밍을 정말로 이해하고 배우고 싶어하고 MQL5로 쉽게 전환하고자 하는 사람들을 돕기 시작하고 싶습니다. 언어는 매우 유사합니다.

여기에서 작업, 이를 해결하기 위한 알고리즘, 그리고 어떤 식으로든 MT용 프로그래밍과 관련된 모든 질문에 대해 논의할 수 있습니다.

포럼의 다른 경험 많은 회원이 문제를 해결하고 스레드가 모든 사람의 관심을 끌 수 있기를 바랍니다.


알아낼 수 있도록 도와주세요. 고문에 후행 중지 기능을 추가하고 컴파일했는데 두 가지 오류가 발생했습니다. - 나는 머리를 부러뜨렸고, 올빼미를 만들기 위해 수리하는 방법을 이해할 수 없습니다. 사실, 가격이 각각 채널의 상단 경계선과 하단 경계선에 닿은 후 이전 전략의 조건에 따라 거래가 마감됩니다. 여기서도 뭔가 변화가 필요하다는 것을 이해합니다. - 조선민주주의인민공화국 군대에 대응하라.

#property copyright "Copyright 2017, MetaQuotes Software Corp."

#속성 링크 "https://www.mql5.com"

#속성 버전 "1.00"

#속성엄격


//------------------------------------------------ ----------

extern 이중 로트 = 0.01;

extern int TakeProfit = 600;

extern int 손절매 = 25;

외부 정수 매직 = 0001;

extern int 미끄러짐 = 3;

외부 정수 TralType = 0; // 0-SAR, 1-ATR, 2-HMA

외부 이중 SAR_Step = 0.02;

외부 이중 SAR_Max = 0.2;

외부 정수 ATR_Period = 14;

외부 이중 ATR_K = 2.0;

extern int HMA_Period = 16;

extern int HMA_Method = 3;

외부 정수 HMA_Shift = 0;

날짜/시간 LBT;

//------------------------------------------------ ----------

extern string TMA = "TMA 표시기의 매개변수";

extern string TimeFrame = "현재 시간 프레임";

extern int HalfLength = 56;

extern int 가격 = PRICE_CLOSE;

외부 이중 ATRMultiplier = 2.0;

extern int ATRPPeriod = 100;

extern bool 보간 = true;

//------------------------------------------------ ----------

이중 PriceHigh, PriceLow, SL, TP;

인트 티켓;


//+----------------------------------------------- --------------------+

//| 전문가 초기화 기능 |

//+----------------------------------------------- --------------------+

int OnInit()

{

if (숫자 == 3 || 숫자 == 5)

{

이익을 취하십시오 *= 10;

손절매 *= 10;

미끄러짐 *= 10;

}

반환(INIT_SUCCESSED);

}

//+----------------------------------------------- --------------------+

//| 전문적인 초기화 해제 기능 |

//+----------------------------------------------- --------------------+

무효 OnDeinit(const int 이유)

{


}

//+----------------------------------------------- --------------------+

//| 전문가 틱 기능 |

//+----------------------------------------------- --------------------+

무효 OnTick()

{

PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, 가격, ATRMultiplier, ATRPPeriod, Interpolate, 1, 0);

PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, 가격, ATRMultiplier, ATRPPeriod, Interpolate, 2, 0);

if(CountSell() == 0 && 입찰가 >= 높은 가격)

{

티켓 = OrderSend(Symbol(), OP_SELL, 랏, 입찰, 슬리피지, 0, 0, "TMA 로봇", 매직, 0, 레드);

만약 (티켓 > 0)

{

SL = NormalizeDouble(Bid + StopLoss*Point, Digits);

TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);

if (OrderSelect(티켓, SELECT_BY_TICKET))

if (!OrderModify(티켓, OrderOpenPrice(), SL, TP, 0))

Print("판매 주문 수정 오류 !");

}

}

if (CountBuy() == 0 && 묻기 <= PriceLow)

{

티켓 = OrderSend(Symbol(), OP_BUY, lot, Ask, Slippage, 0, 0, "TMA 로봇", Magic, 0, Blue);

만약 (티켓 > 0)

{

TP = NormalizeDouble(Ask + TakeProfit*포인트, 자릿수);

SL = NormalizeDouble(Ask - StopLoss*Point, Digits);

if (OrderSelect(티켓, SELECT_BY_TICKET))

if(!OrderModify(티켓, OrderOpenPrice(), SL, TP, 0))

Print("구매 주문을 수정하는 동안 오류가 발생했습니다!");

} else Print("구매 주문 열기 오류");

}

//+----------------------------------------------- --------------------+

//| 전문가 초기화 기능 |

//+----------------------------------------------- --------------------+

정수 초기화()

{

//--------


//--------

리턴(0);

}

//+----------------------------------------------- --------------------+

//| 전문가 틱 기능 |

//+----------------------------------------------- --------------------+

무효 OnTick()

{

PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, 가격, ATRMultiplier, ATRPPeriod, Interpolate, 1, 0);

PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, 가격, ATRMultiplier, ATRPPeriod, Interpolate, 2, 0);

if(CountSell() == 0 && 입찰가 >= 높은 가격)

{

티켓 = OrderSend(Symbol(), OP_SELL, 랏, 입찰, 슬리피지, 0, 0, "TMA 로봇", 매직, 0, 레드);

만약 (티켓 > 0)

{

SL = NormalizeDouble(Bid + StopLoss*Point, Digits);

TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);

if (OrderSelect(티켓, SELECT_BY_TICKET))

if (!OrderModify(티켓, OrderOpenPrice(), SL, TP, 0))

Print("판매 주문 수정 오류!");

} else Print("판매 주문을 열 때 오류가 발생했습니다!");

}

if (CountBuy() == 0 && 묻기 <= PriceLow)

{

티켓 = OrderSend(Symbol(), OP_BUY, lot, Ask, Slippage, 0, 0, "TMA 로봇", Magic, 0, Blue);

만약 (티켓 > 0)

{

TP = NormalizeDouble(Ask + TakeProfit*포인트, 자릿수);

SL = NormalizeDouble(Ask - StopLoss*Point, Digits);

if (OrderSelect(티켓, SELECT_BY_TICKET))

if(!OrderModify(티켓, OrderOpenPrice(), SL, TP, 0))

Print("구매 주문을 수정하는 동안 오류가 발생했습니다!");

} else Print("구매 주문 열기 오류");

}

if (질문 <= PriceLow && CountSell() > 0)

{

(int i = OrdersTotal() -1; i>0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderMagicNumber() == Magic && OrderType() == OP_SELL)

if (!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black))

Print("판매 주문 마감 오류!");

}

}

}

if (Bid >= PriceHigh && CountBuy() > 0)

{

(int i = OrdersTotal() -1; i>0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderMagicNumber() == Magic && OrderType() == OP_BUY)

if(!OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black))

Print("구매 주문을 닫는 동안 오류가 발생했습니다!");

}

}

}

}

//+----------------------------------------------- --------------------+

정수 CountSell()

{

정수 개수 = 0;

for (int trade = OrdersTotal()-1; trade>=0; trade--)

{

if(주문선택(무역, SELECT_BY_POS, MODE_TRADES))

{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)

카운트++;

}

}

반환(카운트);

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

정수 CountBuy()

{

정수 개수 = 0;

for (int trade = OrdersTotal()-1; trade>=0; trade--)

{

if(주문선택(무역, SELECT_BY_POS, MODE_TRADES))

{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)

카운트++;

}

}

리턴(카운트);

}

//+----------------------------------------------- --------------------+

//| 전문적인 초기화 해제 기능 |

//+----------------------------------------------- --------------------+

정수 초기화()

{

//+-------


//+-------

리턴(0);

}

//+----------------------------------------------- --------------------+

//| 전문가 시작 기능 |

//+----------------------------------------------- --------------------+

정수 시작()

{

//-----

부울 오류 = 거짓;

if (LBT!=시간[0]) {

if (OrdersTotal()!=0) {

for (int i=0; i<OrdersTotal(); i++) {

if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()<2) {

이중 SL = OrderStopLoss();

주문 유형()==0) {

스위치(트랄타입) {

경우 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);

부서지다;

사례 1: SL = 높음[1] - iATR(NULL,0,ATR,기간,1)*ATR_K;

부서지다;

사례 2: SL = iCustom(NULL,0,"VininI_HMAsound&amp",HMA_Period,HMA_Method,3,HMA_Shift,fals,fals,"",1,0,0);

부서지다;

}

if (SL<OrderStopLoss())

SL = 주문 중지 손실();

}

if (주문 유형()==1) {

스위치(트랄타입) {

경우 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);

부서지다;

사례 1: SL = 낮음[1] + iATR(NULL,0,ATR,기간,1)*ATR_K;

부서지다;

사례 2: SL = iCustom(NULL,0,"VininI_HMAsound&amp",HMA_Period,HMA_Method,3,HMA_Shift,fals,fals,"",1,0,0);

부서지다;

}

if (SL>OrderStopLoss())

SL = 주문 중지 손실();

}

if (SL!=OrderStopLoss()) {

if(!OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0))

오류=참;

}

}

}

}

만약 (!오류)

LBT = 시간[0];

}

리턴(0);

}

//+----------------------------------------------- --------------------+

 
vkravtzov :

코딩 배우기!!!


코딩을 배우세요!!!


코딩을 배우세요!!!


코딩을 배우세요!!!


코딩을 배우세요!!!


코딩을 배우세요!!!


코딩을 배우세요!!!


코딩을 배우세요!!!


코딩을 배우세요!!!


코딩을 배우세요!!!

 
vkravtzov : 알아낼 수 있도록 도와주세요. EA에 후행 중지 기능을 추가하고 컴파일했는데 두 가지 오류가 발생했습니다. - 나는 머리를 부러뜨렸고, 올빼미를 만들기 위해 고치는 방법을 이해할 수 없습니다. 사실, 가격이 채널의 위쪽 경계선과 아래쪽 경계선에 각각 닿은 후 이전 전략의 조건에 따라 거래가 닫힙니다. 여기서도 뭔가 변화가 필요하다는 것을 이해합니다. - 조선민주주의인민공화국군에 대응하라.

돕기로 결정했습니다. 그러나 저자에게 질문 이 있었습니다. 이 초기화 함수 중 두 가지가 있습니다. 이 함수는 무엇을 합니까?

 //+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
{
   if ( Digits == 3 || Digits == 5 )
   {
   TakeProfit *= 10 ;
   StopLoss   *= 10 ;
   Slippage   *= 10 ;
   }
   return ( INIT_SUCCEEDED );
}


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//--------
//--------
     return ( 0 );
    }

두 개의 OnTick() 함수 가 있습니다. .... 게다가 세 번째 함수는 int Start()입니다. 모두 틱이 도착하면 실행됩니다. 그리고 터미널은 어떤 순서로 실행합니까?

오류: OnTick() 함수 끝에 닫는 중괄호가 없습니다.

 //+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
{
  PriceHigh = iCustom ( NULL , 0 , "TMA_Fair" , TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1 , 0 );
  PriceLow  = iCustom ( NULL , 0 , "TMA_Fair" , TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2 , 0 );
   if (CountSell() == 0 && Bid >= PriceHigh)
  {
     ticket = OrderSend ( Symbol (), OP_SELL , Lots, Bid , Slippage, 0 , 0 , "TMA robot" , Magic, 0 , Red);
     if (ticket > 0 )
     {
        SL = NormalizeDouble ( Bid + StopLoss* Point , Digits );
        TP = NormalizeDouble ( Bid - TakeProfit* Point , Digits );
         if ( OrderSelect (ticket, SELECT_BY_TICKET ))
           if (! OrderModify (ticket, OrderOpenPrice (), SL, TP, 0 ))
                 Print ( "Ошибка модификации ордера на продажу!" );
     }
  }
   if (CountBuy() == 0 && Ask <= PriceLow)
  {
     ticket = OrderSend ( Symbol (), OP_BUY , Lots, Ask , Slippage, 0 , 0 , "TMA robot" , Magic, 0 , Blue);
     if (ticket > 0 )
     {
        TP = NormalizeDouble ( Ask + TakeProfit* Point , Digits );
        SL = NormalizeDouble ( Ask - StopLoss* Point , Digits );
         if ( OrderSelect (ticket, SELECT_BY_TICKET ))
             if (! OrderModify (ticket, OrderOpenPrice (), SL, TP, 0 ))
                 Print ( "Ошибка модификации ордера на покупку!" );
     }   else Print ( "Ошибка открытия ордера на покупку" );
   }
}     // Эту скобку добавил !!!!!!!!!!!!!!!!!!!!!!!!!

이제 컴파일러는 8개의 오류를 발견했습니다. 제거됨

 //+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//--------
//--------
     return ( 0 );
    }


//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{
//+-------
//+-------
   return (0);
   }

오류가 7이 되었습니다.

if OrderType()==0) 대신 if: if(OrderType()==0) - 8개의 오류가 있습니다.

두 곳에서 iATR(NULL,0,ATR, Period ,1) - iATR(NULL,0,ATR_Period,1)이 필요합니다 - 2개의 오류가 있습니다

부울 오류 = 거짓; 부울 오류 = 거짓; - 3개의 오류가 있습니다.

VininI_HMAsound&amp 표시기는 어디에서 얻을 수 있습니까? 거기에 어떤 설정이 있나요? = 그러면 오류는 1로 유지됩니다.

그리고 왜 세 곳에서 질문합니까?

 

MT4에서 무료 어드바이저와 시그널을 다운로드하고 설치하도록 도와주세요. 찾을 수 없습니다. 찾을 수 없습니다. 찾을 수 없지만 다운로드할 수 없습니다. 어디를 봐야하는지 알려주세요

 
vovik36 Степанов :

MT4에서 무료 어드바이저와 시그널을 다운로드하여 설치하도록 도와주세요. 찾을 수 없습니다. 찾을 수 없습니다. 설치할 수만 있지만 다운로드할 수는 없습니다. 어디를 봐야하는지 알려주세요

먼저 학교를 마치고 오십시오.

 
Artyom Trishkin :

그래서?


   for (i=pos; i<rates_total && ! IsStopped (); i++)
     {
       double dmin= 1000000.0 ;
       double dmax=- 1000000.0 ;
       for (k=i-InpKPeriod+ 1 ; k<=i; k++)
       {double ima=iMA(Symbol(),1,60,0,1,0,k);
         if (dmin>ima)  dmin=ima;
         if (dmax<ima)  dmax=ima;
                   Comment (ima);
        }
      ExtLowesBuffer[i]=dmin;
      ExtHighesBuffer[i]=dmax;
     }

안녕하세요. 그가 ima= iMA ( Symbol() , 1 , 60 , 0 , 1 , 0 ,k) 가 보이지 않는 이유를 말해주세요. 주석을 통해 라인 자체보다 훨씬 높은 인용을 보여줍니다. 이 때문에 최소값과 최대값이 제대로 계산되지 않습니다.

 
Rustam Bikbulatov :

안녕하세요. 그가 ima= iMA ( NULL , 60 , 24 , 0 , 1 , 0 ,k )를 보지 못하는 이유를 말해주세요. 주석을 통해 라인 자체보다 훨씬 높은 인용을 보여줍니다. 이 때문에 최소값과 최대값이 제대로 계산되지 않습니다.

iMA - 시계열과 같은 번호 매기기, 0 - 가장 최신 번호. 그리고 당신은 그 반대인 것 같습니다.
 
Maxim Kuznetsov :
iMA - 시계열과 같은 번호 매기기, 0 - 가장 최신 번호. 그리고 당신은 그 반대인 것 같습니다.

이것은 실수로 설정되었습니다. 아무것도 변경되지 않습니다. k가 잘못된 것을 보여주는 바로 그 본질!