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

 
커뮤니티를 도와주세요...
MT5
동시에 여러 쌍의 매개변수를 열거하여 최적화할 수 없습니다.
테스터의 "심볼" 열에서 "시장 감시의 모든 기호" 옵션을 선택하면 "매개변수" 탭에서 입력 매개변수 열거를 설정하는 옵션이 비활성화되고 확인란이 단순히 선택되지 않고 값이 없습니다. 입력됩니다. 무엇을 해야 합니까?
 
MikeZv :
커뮤니티를 도와주세요...
MT5
동시에 여러 쌍의 매개변수를 열거하여 최적화할 수 없습니다.
테스터의 "심볼" 열에서 "시장 감시의 모든 기호" 옵션을 선택하면 "매개변수" 탭에서 입력 매개변수 열거를 설정하는 옵션이 비활성화되고 확인란이 단순히 선택되지 않고 값이 없습니다. 입력됩니다. 무엇을 해야 합니까?

여러 기호에서 최적화되지 않고 단순히 동일한 매개변수로 테스트(확인)된 거래입니다.

 

안녕하세요.

차트에 버튼, 두 개의 가격 매개변수, 시간 범위가 있도록 mql5 에 표시기를 작성하도록 도와주세요.

이 데이터를 채우고 버튼을 누르면 차트에 채워진 사각형이 지정된 시간 범위 내에서 지속되는 상한가와 하한 가격으로 그려집니다.

 

여보세요. 나는 Mashka에 따라 올빼미에 마틴을 "고정"하려고합니다.

하지만 뭔가 작동하지 않습니다 ...

바로 말씀드리겠습니다. 여기 사이트에서 공개 도메인의 코드를 가져왔습니다. 나는 확실히 그들을 주장하지 않습니다.

내가 뭔가를 연결하지 않은 곳을 말해?

 //+-----------------------------------------------------------------------------------------------+
//|                                                                     Simple Moving Average.mq4 |
//|                                                                 Copyright 2016, Andrey Minaev |
//|                                                     https://www.mql5.com/ru/users/id.scorpion |
//+-----------------------------------------------------------------------------------------------+
#property copyright "Copyright 2016, Andrey Minaev"
#property link        " https://www.mql5.com/ru/users/id.scorpion "
#property version    "1.00"
#property strict

// Параметры советника
extern string sParametersEA = "" ;     // Параметры советника
extern double dLots         = 0.01 ;     // Количество лотов
extern int     iStopLoss     = 30 ;     // Уровень убытка (в пунктах)
extern int     iTakeProfit   = 30 ;     // Уровень прибыли (в пунктах)
extern int     iSlippage     = 3 ;       // Проскальзование (в пунктах)
extern int     iMagic        = 1 ;       // Индентификатор советника
extern double K_Martin     = 2.0 ;     // мартин
extern int     DigitsLot    = 2 ;       // для мартина
extern int     OrdersClose  = 5 ;       // мартин сделки
// Параметры индикатора
extern string sParametersMA = "" ;     // Параметры индикатора
extern int     iPeriodMA     = 14 ;     // Период усреднения
// Глобальные переменные
double dMA;
//+-----------------------------------------------------------------------------------------------+
int OnInit ()
  {
// Если брокер использует 3 или 5 знаков после запятой, то умножаем на 10
   if ( Digits == 3 || Digits == 5 )
     {
      iStopLoss   *= 10 ;
      iTakeProfit *= 10 ;
      iSlippage   *= 10 ;
     }

   return ( INIT_SUCCEEDED );
  }
//+-----------------------------------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {

  }
//+-----------------------------------------------------------------------------------------------+
void OnTick ()
  {
// Получим значение индикатора
   dMA = iMA ( Symbol (), 0 , iPeriodMA, 0 , MODE_SMA , PRICE_CLOSE , 0 );

// Если нет открытых ордеров, то входим в условие
   if (bCheckOrders() == true )
     {
       // Если появился сигнал на покупку, то откроем ордер на покупку
       if (bSignalBuy() == true )
         vOrderOpenBuy();

       // Если появился сигнал на продажу, то откроем ордер на продажу
       if (bSignalSell() == true )
         vOrderOpenSell();
     }
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                             Функция проверки открытых оредров |
//+-----------------------------------------------------------------------------------------------+
bool bCheckOrders()
  {
// Переберем в цикле ордера, для проверки открытых ордеров данным советником
   for ( int i = 0 ; i <= OrdersTotal (); i++)
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == iMagic)
             return ( false );

   return ( true );
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                             Функция поиска сигнала на покупку |
//+-----------------------------------------------------------------------------------------------+
bool bSignalBuy()
  {
   if (dMA > Open[ 1 ] && dMA < Close[ 1 ])
       return ( true );

   return ( false );
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                             Функция поиска сигнала на продажу |
//+-----------------------------------------------------------------------------------------------+
bool bSignalSell()
  {
   if (dMA < Open[ 1 ] && dMA > Close[ 1 ])
       return ( true );

   return ( false );
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                            Функция открытия ордера на покупку |
//+-----------------------------------------------------------------------------------------------+
void vOrderOpenBuy()
  {
   int iOTi = 0 ;   // Тикет ордера

   iOTi = OrderSend ( Symbol (), OP_BUY, dLots, Ask, iSlippage, 0 , 0 , "" , iMagic, 0 , clrNONE );

// Проверим открылся ли ордер
   if (iOTi > 0 )
       // Есди да, то выставим уровни убытка и прибыли
      vOrderModify(iOTi);
   else
       // Если нет, то получим ошибку
      vError( GetLastError ());
  }

//+-----------------------------------------------------------------------------------------------+
//|                                                            Функция открытия ордера на продажу |
//+-----------------------------------------------------------------------------------------------+
void vOrderOpenSell()
  {
   int iOTi = 0 ;   // Тикет ордера

   iOTi = OrderSend ( Symbol (), OP_SELL, dLots, Bid, iSlippage, 0 , 0 , "" , iMagic, 0 , clrNONE );

// Проверим открылся ли ордер
   if (iOTi > 0 )
       // Есди да, то выставим уровни убытка и прибыли
      vOrderModify(iOTi);
   else
       // Если нет, то получим ошибку
      vError( GetLastError ());
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                                    Функция модификации ордера |
//+-----------------------------------------------------------------------------------------------+
void vOrderModify( int iOTi)
  {
   int     iOTy = - 1 ;   // Тип ордера
   double dOOP = 0 ;     // Цена открытия ордера
   double dOSL = 0 ;     // Стоп Лосс
   int     iMag = 0 ;     // Идентификатор советника

   double dSL = 0 ;     // Уровень убытка
   double dTP = 0 ;     // Уровень прибыли
// double OL= dLots;    // для мартина

// Выберем по тикету открытый ордер, получим некоторые значения
   if ( OrderSelect (iOTi, SELECT_BY_TICKET, MODE_TRADES))
     {
      iOTy = OrderType();
      dOOP = OrderOpenPrice();
      dOSL = OrderStopLoss();
      iMag = OrderMagicNumber();
     }

// Если ордер открыл данный советник, то входим в условие
   if (OrderSymbol() == Symbol () && OrderMagicNumber() == iMag)
     {
       // Если Стоп Лосс текущего ордера равен нулю, то модифицируем ордер
       if (dOSL == 0 )
        {
         if (iOTy == OP_BUY)
           {
            dSL = NormalizeDouble (dOOP - iStopLoss * Point , Digits );
            dTP = NormalizeDouble (dOOP + iTakeProfit * Point , Digits );

             bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0 , clrNONE );
           }

         if (iOTy == OP_SELL)
           {
            dSL = NormalizeDouble (dOOP + iStopLoss * Point , Digits );
            dTP = NormalizeDouble (dOOP - iTakeProfit * Point , Digits );

             bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0 , clrNONE );
           }
        }
     }

  }
//+-----------------------------------------------------------------------------------------------+
//|                                                                      Функция обработки ошибок |
//+-----------------------------------------------------------------------------------------------+
void vError( int iErr)
  {
   switch (iErr)
     {
       case 129 :   // Неправильная цена
       case 135 :   // Цена изменилась
       case 136 :   // Нет цен
       case 138 :   // Новые цены
         Sleep ( 1000 );
         RefreshRates();
         break ;

       case 137 :   // Брокер занят
       case 146 :   // Подсистема торговли занята
         Sleep ( 3000 );
         RefreshRates();
         break ;
     }
  }
//+-----------------------------------------------------------------------------------------------+
double LOT()
  {
   int n= 0 ;
   double OL=dLots;
   for ( int j = OrdersHistoryTotal()- 1 ; j >= 0 ; j--)
     {
       if ( OrderSelect (j, SELECT_BY_POS,MODE_HISTORY))
        {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == iMagic)
           {
             if (OrderProfit()< 0 )
              {
               if (n== 0 )
                  OL= NormalizeDouble (OrderLots()*K_Martin,DigitsLot);
               n++;
               if (n>=OrdersClose)
                 {
                   Comment ( "1" );
                   return (dLots);
                 }
              }
             else
              {
               if (n== 0 )
                 {
                   Comment ( "2" );
                   return (dLots);
                 }
               else
                 {
                   Comment ( "3" );
                   return (OL);
                 }
              }
           }
        }
     }
   return (OL);
  }
//+------------------------------------------------------------------+
 
законопослушный гражданин :

여보세요. 나는 Mashka에 따라 올빼미에게 마틴을 "부착"하려고합니다.

하지만 뭔가 작동하지 않습니다 ...

바로 말씀드리겠습니다. 여기 사이트에서 공개 도메인의 코드를 가져왔습니다. 나는 확실히 그들을 주장하지 않습니다.

내가 뭔가를 연결하지 않은 곳을 말해?

첫눈에

       if ( OrderSelect (j, SELECT_BY_POS,MODE_HISTORY))
        {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == iMagic)
           {
             if (OrderProfit()< 0 )

당신은 잃어버린 주문을 찾고 있습니다. 먼저 마지막으로 닫힌 것을 찾은 다음 이익이 무엇인지 살펴보고 음수이면 "OrderLots()*K_Martin"

 
законопослушный гражданин :


하지만 뭔가 작동하지 않습니다 ...


문제에 대한 매우 유익한 설명

 

좋은 오후에요!

누군가 2,3... MT4 터미널의 전략 테스터 에서 테스트를 위한 전문 고문을 실행하는 방법을 알려줄 수 있습니까?

 
законопослушный гражданин :

좋은 오후에요!

누군가 2,3... MT4 터미널의 전략 테스터 에서 테스트를 위한 전문 고문을 실행하는 방법을 알려줄 수 있습니까?

하나로 병합

[삭제]  
законопослушный гражданин :

좋은 오후에요!

누군가 2,3... MT4 터미널의 전략 테스터 에서 테스트를 위한 전문 고문을 실행하는 방법을 알려줄 수 있습니까?

마치 차를 타고 세 방향으로 운전하는 것과 같습니다.

\\\\\\\\\\\\\\\\\\\\\\\\\\

다중 통화 Expert Advisor를 사용할 수는 있지만 각각에 대해 별도의 기능을 작성하십시오.

 

감사하다! 그것은 아이디어입니다!