초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1288

 
내가 이해하는 _Digits는 무엇입니까?
그리고 다른 통화 쌍에 대해 이 값을 얻는 방법은 무엇입니까?
말해 주세요.
 
User_mt5 :
내가 이해하는 _Digits는 무엇입니까?
그리고 다른 통화 쌍에 대해 이 값을 얻는 방법은 무엇입니까?
말해 주세요.

SYMBOL_DIGITS

쉼표 뒤의 여러 기호

정수

 
여기요!!! 완료된 구조를 로그에 표시하는 방법을 알려주세요.

MqlTradeRequest mrequest ???

MQL5에 기능이 있나요??? 왜 그런 메시지가 수신되는지 알고 싶습니다 2021.02.08 21:29:20.876 my_first_ea_sartrailing(BRN,M5) 경고: 판매 주문 요청 실패 - 오류 코드: 4756


 //--- собираем все вместе
   if (Sell_Condition_1 && Sell_Condition_2)
     {
       if (Sell_Condition_3 && Sell_Condition_4)
        {
         // есть ли в данный момент открытая позиция на продажу?
         if (Sell_opened)
           {
             Alert ( "Уже есть позиция на продажу!!!" );
             return ;     // не добавлять к открытой позиции на продажу
           }
         mrequest.action = TRADE_ACTION_DEAL ;                                   // немедленное исполнение
         mrequest.price = NormalizeDouble (latest_price.bid, _Digits );           // последняя цена Bid
         mrequest.sl = NormalizeDouble (latest_price.bid + STP* _Point , _Digits ); // Stop Loss
         mrequest.tp = NormalizeDouble (latest_price.bid - TKP* _Point , _Digits ); // Take Profit
         mrequest.symbol = _Symbol ;                                             // символ
         mrequest.volume = Lot;                                                 // количество лотов для торговли
         mrequest.magic = EA_Magic;                                             // Magic Number
         mrequest.type= ORDER_TYPE_SELL ;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_FOK ;                             // тип исполнения ордера - все или ничего
         mrequest.deviation= 100 ;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
         OrderSend (mrequest,mresult);
         // анализируем код возврата торгового сервера
         if (mresult.retcode== 10009 || mresult.retcode== 10008 ) //Request is completed or order placed
           {
             Alert ( "Ордер Sell успешно помещен, тикет ордера #:" ,mresult.order, "!!" );
           }
         else
           {
             Alert ( "Запрос на установку ордера Sell не выполнен - код ошибки:" , GetLastError ());
             return ;
           }
        }
     }
   return ;
  }

 
Kira27 :
여기요!!! 완료된 구조를 로그에 표시하는 방법을 알려주세요.

MqlTradeRequest mrequest ???

MQL5에 기능이 있나요??? 왜 그런 메시지가 수신되는지 알고 싶습니다 2021.02.08 21:29:20.876 my_first_ea_sartrailing(BRN,M5) 경고: 판매 주문 요청 실패 - 오류 코드: 4756


https://www.mql5.com/ru/forum/327894

다음 은 대본입니다.
Ошибка 4756
Ошибка 4756
  • 2019.12.06
  • www.mql5.com
Всем добрый день. Помогите пожалуйста разобраться. При добавлении эксперта в маркет, во время тестирования выходит это - -- NEW_ORDER(): lot=0...
 
말해주세요,
창에서 경고 대화 상자 를 프로그래밍 방식으로 제거하는 방법은 무엇입니까?
 
코드에서 이 줄을 이해하는 방법을 알려주십시오 -- CParabolicStop *SARTrailing[];
CNRTRSstop *NRTRTrailing[]; CParabolicStop 및 CNRTRStop이 클래스, * 포인터, 배열 SARTrailing[]NRTRTrailing[]임을 이해합니다. 그렇다면 이 행은 무엇을 의미합니까? 이 EA https://www.mql5.com/en/articles/134의 기사에 따르면 --- 그것을 이해하는 방법? 그리고 이러한 배열은 정확히 어디에서 생성됩니까? 클래스를 배열에 로드하는 것이 정말로 가능합니까? 아니면 클래스 객체? 그리고 실용적인 관점에서 그것은 무엇을 위한 것입니까?
 //+------------------------------------------------------------------+
//|                                          Sample_TrailingStop.mq5 |
//|                                        MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property version    "1.00"

#include <Sample_TrailingStop.mqh> // подключение класса трейлинга

//--- input parameters
input double    SARStep     =   0.02 ;     // Шаг Parabolic
input double    SARMaximum  =   0.02 ;     // Максимум Parabolic
input int       NRTRPeriod  =   40 ;       // Период NRTR
input double    NRTRK       =   2 ;       // Коэффициент NRTR

string Symbols[]={ "EURUSD" , "GBPUSD" , "USDCHF" , "USDJPY" };

CParabolicStop *SARTrailing[];
CNRTRStop *NRTRTrailing[];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   ArrayResize (SARTrailing, ArraySize (Symbols));   // изменение размера в соответствии с количеством используемых символов
   ArrayResize (NRTRTrailing, ArraySize (Symbols)); // изменение размера в соответствии с количеством используемых символов   
   for ( int i= 0 ;i< ArraySize (Symbols);i++)
     { // для всех символов
      SARTrailing[i]= new CParabolicStop(); // создание экземпляра класса CParabolicStop
      SARTrailing[i].Init(Symbols[i], PERIOD_CURRENT , false , true , true , 5 , 15 +i* 17 ,Silver,Blue); // инициализация экземпляра класса CParabolicStop 
       if (!SARTrailing[i].SetParameters(SARStep,SARMaximum))
        { // установка параметров экземпляра класса CParabolicStop 
         Alert ( "trailing error" );
         return (- 1 );
        }
      SARTrailing[i].StartTimer(); // запуск таймера
       //----
      NRTRTrailing[i]= new CNRTRStop(); // создание экземпляра класса CNRTRStop
      NRTRTrailing[i].Init(Symbols[i], PERIOD_CURRENT , false , true , true , 127 , 15 +i* 17 ,Silver,Blue); // инициализация экземпляра класса CNRTRStop 
       if (!NRTRTrailing[i].SetParameters(NRTRPeriod,NRTRK))
        { // установка параметров экземпляра класса CNRTRcStop 
         Alert ( "trailing error" );
         return (- 1 );
        }
      NRTRTrailing[i].StartTimer(); // запуск таймера         
     }
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   for ( int i= 0 ;i< ArraySize (Symbols);i++)
     {
      SARTrailing[i].Deinit();
      NRTRTrailing[i].Deinit();
       delete (SARTrailing[i]);
       delete (NRTRTrailing[i]);
     }

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {

   for ( int i= 0 ;i< ArraySize (Symbols);i++)
     {
      SARTrailing[i].DoStoploss();
      NRTRTrailing[i].DoStoploss();
     }

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

void OnTimer ()
  {
   for ( int i= 0 ;i< ArraySize (Symbols);i++)
     {
      SARTrailing[i].Refresh();
      NRTRTrailing[i].Refresh();
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam
                  )
  {

   for ( int i= 0 ;i< ArraySize (Symbols);i++)
     {
      SARTrailing[i].EventHandle(id,lparam,dparam,sparam);
      NRTRTrailing[i].EventHandle(id,lparam,dparam,sparam);
     }
  }
//+------------------------------------------------------------------+

그리고 이 별표가 포인터 *로 쓰여진 곳을 문서에서 표시하는 것이 어렵지 않다면. 어쩐지 봤는데 이미 교과서를 뒤져도 못 찾겠어((((

Как создать свой Trailing Stop
Как создать свой Trailing Stop
  • www.mql5.com
Основное правило трейдера - дай прибыли расти, обрезай убытки! В статье рассматривается один из основных технических приемов, позволяющий следовать этому правилу - перемещение уровня защитной остановки (уровня Stoploss) вслед за растущей прибылью позиции, другими словами - скользящий стоп или трейлинг стоп (trailingstop). Приводится пошаговая процедура создания класса для трейлинг стопа на индикаторах SAR и NRTR, который каждый желающий сможет за 5 минут встроить в своего эксперта или использовать независимо для управления позициями на своем счете.
 

모든 것이 가능하며 지표를 사용하지 않고 거래를 열고 닫는 알고리즘을 만드는 방법

예를 들어, 우리는 두 개의 선을 취합니다. 하나의 추세선은 위쪽이고 두 번째 추세선도 아래쪽이며 서로 위에 놓여 있고 두 선 사이에 교차점이 나타납니다. 이 점이 시간상 15-30이라고 가정해 보겠습니다. 어느 쪽에서든 시작하기 위해 정확히 같은 시간에 자동으로 주문을 여는 방법, 알고리즘이 이러한 점을 찾고 위치를 여는 방법은 무엇입니까? 설명과 의견을 부탁드립니다.

그러한 T3를 기반으로 Expert Advisor를 만들 수 있습니까?
Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением...
 
여기요!!! 그런 질문이 있습니까? 배열로 수집해야 하고 표시기는 다른 시간대에 처리하지만 다음과 같이 나타납니다.
 Fractal= iFractals ( Symbol (),tik);

수 없습니다((이상합니다. 이 매개변수에 소수를 사용할 수 있지만 숫자 상수가 있는 변수는 사용할 수 없는 이유는 무엇입니까?
 void OnTick ()
  {
   for ( int tik = 1 ; tik <= 6 ; tik++)
     {
      Fractal= iFractals ( Symbol (),tik);   // Вот эта tik переменная вызывает ошибку при компиляции

       switch (tik)
        {
         case 1 :
             CopyBuffer (Fractal, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_W1 ),FractalUP_W1);   // заполнение масива FractalUp[] верхними фракталами на дневном графике
             CopyBuffer (Fractal, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_W1 ),FractalDown_W1); // заполнение масива FractalUp[] нижними фракталами на дневном графике
             //--- индексация как в таймсериях
             ArraySetAsSeries (FractalUP_W1, true );   //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серии
             ArraySetAsSeries (FractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
            ;
             break ;
         case 2 :
             CopyBuffer (Fractal, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_D1 ),FractalUP_D1);   // заполнение масива FractalUp[] верхними фракталами на дневном графике
             CopyBuffer (Fractal, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_D1 ),FractalDown_D1); // заполнение масива FractalUp[] нижними фракталами на дневном графике
             //--- индексация как в таймсериях
             ArraySetAsSeries (FractalUP_D1, true );   //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серии
             ArraySetAsSeries (FractalDown_D1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
            ;
             break ;
         case 3 :
             CopyBuffer (Fractal, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_H4 ),FractalUP_H4);   // заполнение масива FractalUp[] верхними фракталами на дневном графике
             CopyBuffer (Fractal, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_H4 ),FractalDown_H4); // заполнение масива FractalUp[] нижними фракталами на дневном графике
             //--- индексация как в таймсериях
             ArraySetAsSeries (FractalUP_H4, true );   //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серии
             ArraySetAsSeries (FractalDown_H4, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
            ;
             break ;
         case 4 :
             CopyBuffer (Fractal, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_H1 ),FractalUP_H1);   // заполнение масива FractalUp[] верхними фракталами на дневном графике
             CopyBuffer (Fractal, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_H1 ),FractalDown_H1); // заполнение масива FractalUp[] нижними фракталами на дневном графике
             //--- индексация как в таймсериях
             ArraySetAsSeries (FractalUP_H1, true );   //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серии
             ArraySetAsSeries (FractalDown_H1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
            ;
             break ;
         case 5 :
             CopyBuffer (Fractal, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_M30 ),FractalUP_30);   // заполнение масива FractalUp[] верхними фракталами на дневном графике
             CopyBuffer (Fractal, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_M30 ),FractalDown_30); // заполнение масива FractalUp[] нижними фракталами на дневном графике
             //--- индексация как в таймсериях
             ArraySetAsSeries (FractalUP_30, true );   //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серии
             ArraySetAsSeries (FractalDown_30, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
            ;
             break ;
         case 6 :
             CopyBuffer (Fractal, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_M15 ),FractalUP_15);   // заполнение масива FractalUp[] верхними фракталами на дневном графике
             CopyBuffer (Fractal, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_M15 ),FractalDown_15); // заполнение масива FractalUp[] нижними фракталами на дневном графике
             //--- индексация как в таймсериях
             ArraySetAsSeries (FractalUP_15, true );   //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серии
             ArraySetAsSeries (FractalDown_15, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
            ;
             break ;

        }
     }
 
Kira27 :
여기요!!! 그런 질문이 있습니까? 배열로 수집해야 하고 표시기는 다른 시간대에 처리하지만 다음과 같이 나타납니다.
할 수 없습니다(( 이상합니다. 이 매개 변수에 소수를 사용할 수 있는 이유는 무엇입니까? 하지만 숫자 상수가 있는 변수는 사용할 수 없습니까?

기간이 있어야 하기 때문에

handle= iFractals ( Symbol() , tf );

식별자

설명

PERIOD_CURRENT

현재 기간

PERIOD_M1

1 분

PERIOD_M2

2분

PERIOD_M3

3 분

PERIOD_M4

4분

PERIOD_M5

5 분

PERIOD_M6

6분

PERIOD_M10

10 분

PERIOD_M12

12분

PERIOD_M15

15 분

PERIOD_M20

20 분

PERIOD_M30

30 분

PERIOD_H1

1 시간

PERIOD_H2

2시간

PERIOD_H3

3 시간

PERIOD_H4

4 시간

PERIOD_H6

6 시간

PERIOD_H8

8시

PERIOD_H12

12 시간

PERIOD_D1

1 일

PERIOD_W1

일주

PERIOD_MN1

1 개월

 
Kira27 :
여기요!!! 그런 질문이 있습니까? 배열로 수집해야 하고 표시기는 다른 시간대에 처리하지만 다음과 같이 나타납니다.
수 없습니다((이상합니다. 이 매개변수에 소수를 사용할 수 있지만 숫자 상수가 있는 변수는 사용할 수 없는 이유는 무엇입니까?

MQL5의 표시기 핸들은 한 번 생성되어야 합니다!!! 그리고 OnInit()에서 해야 합니다!!!