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

 

안녕하세요. 코드 작성을 배우고 있는데 문제가 있습니다. 테스터의 코드가 실행되고 하나의 거래가 열리면 됩니다. 가격은 변하지 않고 모든 것이 제자리에 멈춰 있습니다.

신경쓰시는 분들 조언 부탁드립니다.

 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));
        {
         Print ( "Открыта Позиция BUY" );
              {
               if (Forder > 0 )
                 {
                  TP = NormalizeDouble ((Ask+TakeProfit* _Point +OrderSwap()+OrderCommission()), _Digits );
                  Forder = OrderModify(Forder,OrderOpenPrice(), 0 ,TP, 0 );
                 } Print ( "Ордер Модифицирован BUY " );
              } Print ( "Ошибка Модификации Ордера BUY" );
        }
       } Print ( "Ошибка Открытия Позиции BUY" );
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
//Открытие позиции Sell      
     if (body < 0 )
       {
        Forder = ( OrderSend ( _Symbol ,OP_SELL,Lot,Bid,Slippage, 0 , 0 , "Коммент Sell" ,Magic, 0 ,Red));
        {
         Print ( "Открыта Позиция SELL" );
              {
               if (Forder > 0 )
                 {
                  TP = NormalizeDouble ((Bid-TakeProfit* _Point +OrderSwap()+OrderCommission()), _Digits );
                  Forder = OrderModify(Forder,OrderOpenPrice(), 0 ,TP, 0 );
                 } Print ( "Ордер Модифицирован SELL " );
              } Print ( "Ошибка Модификации Ордера SELL" );
        }
       } Print ( "Ошибка Открытия Позиции Sell" );
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
   }
 
Alexander Avksentyev # :

안녕하세요. 코드 작성을 배우고 있는데 문제가 있습니다. 테스터의 코드가 실행되고 하나의 거래가 열리면 됩니다. 가격은 변하지 않고 모든 것이 제자리에 멈춰 있습니다.

신경쓰시는 분들 조언 부탁드립니다.

Ask+TakeProfit* _Point +OrderSwap()+OrderCommission()

가격에 스왑과 커미션을 어떻게 추가합니까?

 
MakarFX # :

가격에 스왑과 커미션을 어떻게 추가합니까?

내가 할 수 있고 내가 생각하는 한)

(((Ask+TakeProfit* _Point +OrderSwap()+OrderCommission()* _Point ))

이것이 문제라고 생각하십니까?

 
OnTimer 기능의 잡지에서 렌더링하거나 인쇄하는 동안 테스터에서 주석 을 작동시키는 방법은 무엇입니까?
 
Alexander Avksentyev # :

내가 할 수 있고 내가 생각하는 한)

이것이 문제라고 생각하십니까?

첫째, 개봉 시 스왑이 없습니다.

둘째, 수수료가 $1이라고 가정하고 1.32500의 가격으로 파운드 주문을 엽니다.

(TakeProfit) 200* _포인트와 (커미션) 1$를 더하면 2.32700이 됩니다... 몇 년 후입니까?

 
Ivan Butko 주석 을 작동시키는 방법은 무엇입니까?
OnTick에 OnTimer 추가
 
MakarFX # :
OnTick에 OnTimer 추가

감사해요

 
Alexander Avksentyev # :

내가 할 수 있고 내가 생각하는 한)

이것이 문제라고 생각하십니까?

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


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

별도의 블록으로 사용하는 것이 좋습니다.

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 ());
  }
 
Alexander Avksentyev # :

내가 할 수 있고 내가 생각하는 한)

이것이 문제라고 생각하십니까?

나는 그것이 문제라고 생각하지 않습니다, 그것은 단지 옳지 않습니다. 테스터 동결에 관해서는 전체 코드를 레이아웃하여 보는 것이 좋습니다.

OrderCommission()* _Point

이것도 옳지 않습니다.

_Point - 소수점 이하 자릿수이며 돈을 어떤 식으로든 포인트로 변환하지 않습니다.
 
MakarFX # :

나는 그것이 문제라고 생각하지 않습니다, 그것은 단지 옳지 않습니다. 테스터 동결에 관해서는 전체 코드를 레이아웃하여 보는 것이 좋습니다.

이것도 옳지 않습니다.

_Point - 소수점 이하 자릿수이며 돈을 어떤 식으로든 포인트로 변환하지 않습니다.
 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;

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//


//+------------------------------------------------------------------+
//| 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//
     if ( Digits == 3 || Digits == 5 )
       {
        TakeProfit      *= 10 ;
        TrailStart      *= 10 ;
        TrailDist       *= 10 ;
        TrailStep       *= 10 ;
        TrailTakeProfit *= 10 ;
        Step            *= 10 ;
        Slippage        *= 10 ;
       }
       return ( INIT_SUCCEEDED );
    }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
{
     double body = Close[ 1 ] - Open[ 1 ];
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
//Открытие позиции Buy
     if (body > 0 )
       {
        Forder = ( OrderSend ( _Symbol ,OP_BUY,Lot,Ask,Slippage, 0 , 0 , "Коммент" ,Magic, 0 ,Blue));
        {
         Print ( "Открыта Позиция BUY" );
              {
               if (Forder > 0 )
                   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 ());
                     }
               }
         } Print ( "Ошибка Открытия Позиции BUY" );
       }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
//Открытие позиции Sell      
     if (body < 0 )
       {
        Forder = ( OrderSend ( _Symbol ,OP_SELL,Lot,Bid,Slippage, 0 , 0 , "Коммент Sell" ,Magic, 0 ,Red));
        {
         Print ( "Открыта Позиция SELL" );
               if (Forder > 0 )
                 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 ());
                   }
         }
        } Print ( "Ошибка Открытия Позиции BUY" );}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
//+------------------------------------------------------------------+
//| Tester function                                                  |
//+------------------------------------------------------------------+
double OnTester ()
  {
//---
   double ret= 0.0 ;
//---

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


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