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

 
Alekseu Fedotov # :

아니오, 이것은 정확하지 않습니다.


OrderModify를 사용하면 오히려 그렇습니다.

별도의 블록으로 더 좋습니다.

알았어 고마워!

 
Alexander Avksentyev # :

그게 다야. 도와 주셔서 감사합니다.

 #property strict
//--- input parameters
input int       Magic            = 12345 ;
input int       iTakeProfit      = 10 ;
input int       iTrailStart      = 10 ;
input int       iTrailDist       = 10 ;
input int       iTrailStep       = 10 ;
input int       iTrailTakeProfit = 10 ;
input int       iStep            = 10 ;
input int       iSlippage        = 5 ;
input double    Lot              = 0.01 ;

int       Login = 4950287 ;
datetime time  = D'2022.01.01 00:00:00' ;
string    name  = "AutoP_v.3.0" ;
datetime time1 = 0 ;
double    price, TP, lastlot, minlot;
int       Forder;
int       TakeProfit,TrailStart,TrailDist,TrailStep,TrailTakeProfit,Step,Slippage;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
     if (AccountNumber() != Login)
       {
         int close = MessageBox ( "Неверный номер счёта" , "Ошибка" , MB_OK | MB_ICONSTOP );
         return ( INIT_FAILED );
       } else (AccountNumber() == Login);
             {
               int close = MessageBox ( "Проверка прошла успешно.Экcперт может приступить к работе." , "Инициализация" , MB_OK | MB_ICONEXCLAMATION );
             }
 //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//  
     if ( TimeCurrent () > time)
        {
         int close = MessageBox ( "Время работы закончилось!!!" , "Время работы" , MB_OK | MB_ICONSTOP );
         return ( INIT_FAILED );
        } else ( TimeCurrent () < time);
             {
               int close = MessageBox ( "Проверка времени работы прошла успешно.Эксперт может приступить к работе!" , "Время работы" , MB_OK | MB_ICONEXCLAMATION );
             }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
      TakeProfit     =iTakeProfit;
      TrailStart     =iTrailStart;
      TrailDist      =iTrailDist;
      TrailStep      =iTrailStep;
      TrailTakeProfit=iTrailTakeProfit;
      Step           =iStep;
      Slippage       =iSlippage;
     if ( Digits == 3 || Digits == 5 )
       {
        TakeProfit      *= 10 ;
        TrailStart      *= 10 ;
        TrailDist       *= 10 ;
        TrailStep       *= 10 ;
        TrailTakeProfit *= 10 ;
        Step            *= 10 ;
        Slippage        *= 10 ;
       }
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   if (CountTrades() == 0 )
      {
       double body = Close[ 1 ] - Open[ 1 ];
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
//Открытие позиции Buy
       if (body > 0 )
         {
         Forder = ( OrderSend ( _Symbol ,OP_BUY,Lot,Ask,Slippage, 0 , 0 , "Коммент" ,Magic, 0 ,Blue));
         if (Forder > 0 )
           {
             Print ( "Открыта Позиция BUY" );
             if ( OrderSelect (Forder, SELECT_BY_TICKET))
               {
               TP = NormalizeDouble ((Ask+TakeProfit* _Point ), _Digits );
               if (OrderModify(OrderTicket(),OrderOpenPrice(), 0 ,TP, 0 ))
                   Print ( "Ордер Модифицирован BUY " ); 
               else 
                   Print ( "Ошибка Модификации Ордера BUY = " , GetLastError ());
               }
           }
         else
             Print ( "Ошибка Открытия Позиции BUY" );
       }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
//Открытие позиции Sell      
       if (body < 0 )
         {
         Forder = ( OrderSend ( _Symbol ,OP_SELL,Lot,Bid,Slippage, 0 , 0 , "Коммент Sell" ,Magic, 0 ,Red));
         if (Forder > 0 )
            {
             Print ( "Открыта Позиция SELL" );
             if ( OrderSelect (Forder, SELECT_BY_TICKET))
               {
               TP = NormalizeDouble ((Bid-TakeProfit* _Point ), _Digits );
               if (OrderModify(OrderTicket(),OrderOpenPrice(), 0 ,TP, 0 ))
                   Print ( "Ордер Модифицирован SELL " ); 
               else 
                   Print ( "Ошибка Модификации Ордера SELL = " , GetLastError ());
               }
            }
         else
             Print ( "Ошибка Открытия Позиции BUY" );
        }
      }
//---
  }
//+------------------------------------------------------------------+
//| Подсчет открытых ордеров                                         |
//+------------------------------------------------------------------+
int CountTrades() 
  {
   int count = 0 ;
   int i= OrdersTotal ()- 1 ;
   for ( int pos=i;pos>= 0 ;pos--)
     {
       if ( OrderSelect (pos, SELECT_BY_POS, MODE_TRADES))
        {
         if (OrderSymbol()== _Symbol )
           {
             if (OrderMagicNumber()==Magic) count ++;
           }
        }
     }
   return (count);
  }
//+------------------------------------------------------------------+
 
MakarFX # :

감사해요

 
MakarFX # :

그는 즉시 매수와 매도를 동시에 열기 시작했습니다. 나는 그것을 가정했다

 int CountTrades() 
  {
   int count = 0 ;
   int i= OrdersTotal ()- 1 ;
   for ( int pos=i;pos>= 0 ;pos--)
     {
       if ( OrderSelect (pos, SELECT_BY_POS, MODE_TRADES))
        {
         if (OrderSymbol()== _Symbol )
           {
             if (OrderMagicNumber()==Magic) count ++;
           }
        }
     }
   return (count);
  }

이 부분은 마법에 대한 열린 위치가 있는지 확인하고

 if (CountTrades() == 0 )
      {

이 부분은 양방향으로 열 수 없습니다.

 
Alexander Avksentyev # :

그가 한 번에 매수 와 매도 를 모두 열기 시작하자 마자 . 나는 그것을 가정했다

이 부분은 마법에 대한 열린 위치가 있는지 확인하고

이 부분은 양방향으로 열 수 있는 기회를 제공하지 않습니다.

아마 , 로그를 보여주거나 언제, 어떤 쌍에, 몇 시에 기록하여 확인할 수 있도록 하십시오.


그리고 있습니다.

이 부분은 이미 열려 있는 주문이 있는 경우 열 수 없습니다.

 
MakarFX # :

아마 , 로그를 보여주거나 언제, 어떤 쌍에, 몇 시에 기록하여 확인할 수 있도록 하십시오.


그리고 있습니다.

이 부분은 이미 열려 있는 주문이 있는 경우 열 수 없습니다.

블레인, 미안해.

나는 이미 이것을 지배했으며 이전 촛불을 닫은 결과에 따라 각 촛불에서 열리는 것으로 나타났습니다.

내 못.

 
MakarFX # :

아마 , 로그를 보여주거나 언제, 어떤 쌍에, 몇 시에 기록하여 확인할 수 있도록 하십시오.


그리고 있습니다.

이 부분은 이미 열려 있는 주문이 있는 경우 열 수 없습니다.

10명의 다른 편집자들, 내가 뭔가를 바꿀 때마다 나는 혼란스러워졌다.

 
MakarFX # :

아마 , 로그를 보여주거나 언제, 어떤 쌍에, 몇 시에 기록하여 확인할 수 있도록 하십시오.


그리고 있습니다.

이 부분은 이미 열려 있는 주문이 있는 경우 열 수 없습니다.

질문 하나 더.

경고는 얼마나 심각해야 합니까?

 
Alexander Avksentyev # :

질문 하나 더.

경고는 얼마나 심각해야 합니까?

언제나. 부주의로 인한 많은 경고.
 
MakarFX # :

터미널의 비트를 확인하십시오.


추신은 "32 비트 라이브러리"가 64 Windows에서 작동 할 수 있다는 사실이 아닙니다.

Visual Studio에는 이에 대한 설정이 있습니다.

할 것이다. 예, 설정이 있습니다. 콘솔 응용 프로그램을 만들 때 프로그램의 버전 32를 선택하면 시작됩니다. 포인터는 4바이트입니다.

사유: