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

 
Alexey Viktorov :

아무것도 명시되어 있지 않습니다

없음, 각각 MT4의 분기이며주의를 기울이지 마십시오.

알았어, 바빠, 여기 지루해

 

모두를 환영합니다. 인생의 행운과 직장의 이익.

도움을 요청합니다(예기치 않게 예? :)).

Mql에서 저는 2일 "주제에 대해" 멍청한 멍청이입니다. Rial은 자동 거래로 전환하도록 강요합니다. 나는 내 플랫 TS와 물론 공원의 각 라인에 올빼미를 "쓰기"(실제 생활에서 다른 부분에서 조립)하려고합니다. :) 지난 10시간 동안 나는 또 다른 문제 해결에 대해 걱정해 왔으며 지금까지 "여전히 문제가 있습니다." 조언이나 예를 들어 도움을 줄 수 있는 사람이 있다면 저는 매우 감사할 것입니다(구두와 서면, 그리고 가장 중요한 것은 샤워 중에).

일반적으로 그렇게 ... 오랫동안 성공적으로 사용했던 차량이 있습니다. 동일한 상품의 거래 조건에 따라 다방향 시장 주문이 가능합니다(대기 주문 없이). 포지션이 X핍 이상 하락한 경우 거래 신호로 처진 포지션을 보충하는 것이 가능하며, 때때로 (동일한 조건(거래 신호 + 하락 크기)에서) 보충할 수 있습니다. 문제(현재)는 추가 위치를 여는 데 있습니다. 즉... 추가된 위치에 대한 손실 값을 확인하고 반환하는 방법입니다. https://www.mql5.com/ru/forum/117061 예제에 따라 각 포즈에 Magic을 할당하는 코드를 수정했지만 그게 전부입니다. 처진 포즈를 정확히 선택하고 손실 값을 반환하는 방법.... :(.

거래를 시작하기 위한 "my" 코드.

//------

if (NumberOfPositions(Symbol(),OP_BUY, Magic)<1)

{

if (나의 입국 조건)

{

if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); 그렇지 않으면 TP = 0;

if (손절매!=0) SL = NormalizeDouble(입찰가 - 손절매*포인트,자리수); 그렇지 않으면 SL = 0;

ticket=OrderSend(Symbol(),OP_BUY,LOT,NormalizeDouble(Ask,Digits),5,SL,TP,"BUY",Magic,0,Blue);

if(ticket < 0) { Print("구매 주문 번호 열기 오류", GetLastError());}

}}

if (NumberOfPositions(Symbol(),OP_SELL, Magic)<1)

{

if (나의 입국 조건)

{

if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); 그렇지 않으면 TP = 0;

if (stoploss!=0) SL = NormalizeDouble(Ask + stoploss*Point,Digits); 그렇지 않으면 SL = 0;

ticket=OrderSend(Symbol(),OP_SELL,LOT,NormalizeDouble(Bid,Digits),5,SL,TP,"SELL",Magic,0,Red);

if(ticket < 0) { Print("판매 주문 번호 열기 오류", GetLastError());}

}}

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

다음 코드를 사용하여 추가 주문을 열 예정입니다...

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

if (NumberOfPositions(Symbol(),OP_BUY, Magic)==1 && NumberOfPositions(Symbol(),OP_BUY, Magic_2)<1)

{

if (내 진입 조건 && GetProfitOpenPosInPoint (Symbol(),OP_BUY,Magic)>= LEVEL_1)

{

ticket=OrderSend(Symbol(),OP_BUY,LOT,NormalizeDouble(Ask,Digits),5,SL,TP,"추가 구매",Magic_2,0,Blue);

if(ticket < 0) { Print("구매 주문 번호 열기 오류", GetLastError()); }

} }

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

그리고 그것이 내가 일어난 곳입니다 :). GetProfitOpenPosInPoint (Symbol(),OP_BUY,Magic) 대신 사용할 항목. 이론상으로는 Drawdown Level (Symbol(),OP_BUY,Magic)을 사용해야 하지만 얻는 방법은 다음과 같습니다.

도와주세요, 친구들.
Z.Y. 당신이 조언한다면, 나는 당신에게 간청합니다. 나는 여전히 멍청하다는 것을 명심하십시오. 너무 게으르지 말고 나에게 조금 더 보내십시오. 예를 들면 다음과 같습니다. 숲이 거기에 있다면 방향을 표시하는 것을 잊지 마십시오. <------ || ------>.

관심을 가져주셔서 감사합니다 :).

код----доливаем по тренду
код----доливаем по тренду
  • 2009.05.07
  • www.mql5.com
Я пытался написать советник с открытием дополнительных лотов по тренду. Суть заключается вот в чем...
 
Igor Makanu :

없음, 각각 MT4의 분기이며주의를 기울이지 마십시오.

알았어, 바빠, 여기 지루해

MT5와 유사한 지점이 어디 있는지 알려주십시오. 거기에 물어볼 것입니다 ...

 
Alexander Layzerevich :

MT5와 유사한 지점이 어디 있는지 알려주십시오. 거기에 물어볼 것입니다 ...

여기에서 물어보세요. 여기 두 언어로.
 
Alexey Viktorov :

아무것도 명시되어 있지 않다

강조 표시는 함수 선언과 다르지 않습니다. 함수의 입력 매개변수에 함수가 선언되어 있음을 알 수 있습니다.

MT4에서 표시기 에서 함수를 호출하면 오류 없이 전달되고 정상적으로 작동합니다. ( int handle= iEnvelopes ( Symbol (), tf, period, method, shift, price, Deviation(kanal), buff);) MT5에서도 가능합니다.

제대로 하는 방법을 알려주세요?

 
Alexander Layzerevich :

MT4에서 표시기 에서 함수를 호출하면 오류 없이 전달되고 정상적으로 작동합니다. ( int handle= iEnvelopes ( Symbol (), tf, period, method, shift, price, Deviation(kanal), buff);) MT5에서도 가능합니다.

제대로 하는 방법을 알려주세요?

따라서 mql4에서 Envelopes 데이터를 가져오는 것은 불가능합니다.
 
Artyom Trishkin :
따라서 mql4에서 Envelopes 데이터를 가져오는 것은 불가능합니다.

다음은 MT4의 코드입니다.

 //-------------------------------------------------------------------
extern string Parametrs_Indicator       = "Настройки Индикатора" ; // Настройки Индикатора

extern ENUM_TIME_FRAMES   TimeFrames     = 5 ;                     // Временной период
//-------------------------------------------------------------------
       int                 Ma_Period     = 120 ;                   // Период
       ENUM_MA_METHOD      Ma_Method     = 2 ;                     // Mетод усреднения
       int                 Ma_Shift      = 0 ;                     // Cдвиг средней
       ENUM_APPLIED_PRICE Applied_Price = 0 ;                     // Tип цены
//************************************************************************************************/

int OnInit ()
{
double Signal_Buy = iEnvelopes ( Symbol (), TimeFrames, Ma_Period, Ma_Method, Ma_Shift, Applied_Price, Deviation(TimeFrames, Kanal), 2 , 0 ); // Сигнал на Покупку
}
//+------------------------------------------------------------------+
double Deviation( int Time_Frames, int _Kanal)
{

int Simbol = SymbolMagic();
//-------------------------
if (Time_Frames == 0 ) Time_Frames = Period ();

if (Time_Frames == 1 )
   {
   if (_Kanal == 1 )
      {
       switch (Simbol)
         {
         ...
         }
      }
   }
}
//+------------------------------------------------------------------+

모든 것이 잘 작동합니다. 나는 MT5에서 비슷한 것을 원한다

 
Alexander Layzerevich :

다음은 MT4의 코드입니다.

모든 것이 잘 작동합니다. 나는 MT5에서 비슷한 것을 원한다

이것은 다른 코드이기 때문에 작동할 것입니다.
 
Artyom Trishkin :
이것은 다른 코드이기 때문에 작동할 것입니다.

MT5 코드에서 표시기로의 데이터 전송을 수정했습니다.

 //-------------------------------------------------------------------
extern string Parametrs_Indicator       = "Настройки Индикатора" ; // Настройки Индикатора

extern ENUM_TIMEFRAMES     TimeFrames    = PERIOD_M5 ;             // Временной период
//-------------------------------------------------------------------
       int                 Ma_Period     = 120 ;                   // Период
       ENUM_MA_METHOD      Ma_Method     = MODE_SMMA ;             // Mетод усреднения
       int                 Ma_Shift      = 0 ;                     // Cдвиг средней
       ENUM_APPLIED_PRICE Applied_Price = PRICE_CLOSE ;           // Tип цены
//************************************************************************************************/
void OnTick ()
{
double Signal_Buy = ( int )Envelopes( Symbol (), TimeFrames, Ma_Period, Ma_Shift, Ma_Method, Applied_Price, 2 ,  Deviation( 1 )); // Сигнал на Покупку
}
//************************************************************************************************/
double Envelopes( string symb, ENUM_TIMEFRAMES tf, int period, int shift, int method, int price, int buff, double Deviation( int kanal))
{
   double buf[ 1 ];
   int handle= iEnvelopes ( Symbol (), tf, period, shift, method, price, Deviation(kanal));
   if (handle< 0 )
   {
     Print ( "Failed to create handle ATR, Error: " , GetLastError ());
     return ( WRONG_VALUE );
   } else
   {
     if ( CopyBuffer (handle,buff, 0 , 1 ,buf)< 0 )
    {
     Print ( "Failed to copy data from the indicator ATR, Error: " , GetLastError ());
     return ( WRONG_VALUE );
    }
   }
   return (buf[ 0 ]);
}
//************************************************************************************************/

그러나 오류는 동일합니다.

 
Alexander Layzerevich :

다음은 MT4의 코드입니다.

 //-------------------------------------------------------------------
extern string Parametrs_Indicator       = "Настройки Индикатора" ; // Настройки Индикатора

extern ENUM_TIME_FRAMES   TimeFrames     = 5 ;                     // Временной период
//-------------------------------------------------------------------
       int                 Ma_Period     = 120 ;                   // Период
       ENUM_MA_METHOD      Ma_Method     = 2 ;                     // Mетод усреднения
       int                 Ma_Shift      = 0 ;                     // Cдвиг средней
       ENUM_APPLIED_PRICE Applied_Price = 0 ;                     // Tип цены
//************************************************************************************************/

int OnInit ()
{
double Signal_Buy = iEnvelopes ( Symbol (), TimeFrames, Ma_Period, Ma_Method, Ma_Shift, Applied_Price, Deviation(TimeFrames, Kanal), 2 , 0 ); // Сигнал на Покупку
}
//+------------------------------------------------------------------+
double Deviation( int Time_Frames, int _Kanal)
{

int Simbol = SymbolMagic();
//-------------------------
if (Time_Frames == 0 ) Time_Frames = Period ();

if (Time_Frames == 1 )
   {
   if (_Kanal == 1 )
      {
       switch (Simbol)
         {
         ...
         }
      }
   }
}
//+------------------------------------------------------------------+

모든 것이 잘 작동합니다. 나는 MT5에서 비슷한 것을 원한다

손 조심:

내 이전 게시물에서 이것은 코드에서 강조 표시됩니다.

 double Deviation( int Time_Frames, int _Kanal)

이 인용된 메시지의 코드에서 이것은 함수 선언입니다. 또한 강조 표시됩니다.

하지만 이것은

Deviation(TimeFrames, Kanal)

존재하는 사용자 기능을 호출합니다. 이 프로그래밍 방법이 저에게는 받아들일 수 없지만 여전히 이해할 수 있습니다. 그러나 그 코드의 오류를 설명하는 방법은 심지어 어렵습니다.