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

 
//+------------------------------------------------------------------+
//|                                                  MACD Sample.mq4 |
//|                   Copyright 2005-2014, MetaQuotes Software Corp. |
//|                                               http://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright    "2005-2014, MetaQuotes Software Corp."
#property link          " http://www.mql4.com "
input double TakeProfit    = 2190 ;
input double Lots          = 0.5 ;
input double TrailingStop  = 650 ;
input int OpenLevel = 70 ;
input int CloseLevel= 23 ;
input int      Period = 86 ;
input int     Period1 = 87 ;
int LastBars= 0 ;
extern int Magic1 = 110721 ;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick ( void )
  {
   
 
   int     cnt,ticket,total;
//---
// initial data checks
// it is important to make sure that the expert works with a normal
// chart and the user did not make any mistakes setting external 
// variables (Lots, StopLoss, TakeProfit, 
// TrailingStop) in our case, we check TakeProfit
// on a chart of less than 100 bars
//---
//--- Trade only if new bar has arrived
   if (LastBars!= Bars ) LastBars= Bars ;
   else return ( 0 );
   if ( Bars < 100 )
     {
       Print ( "bars less than 100" );
       return ;
     }
   if (TakeProfit< 10 )
     {
       Print ( "TakeProfit less than 10" );
       return ;
     }
//--- to simplify the coding and speed up access data are put into internal variables
   if (CountOrders( "" , - 1 ,Magic1)< 1 )
     
   total= OrdersTotal ();
   if (total< 1 )
     {
       //--- no opened orders identified
       if (AccountFreeMargin()<( 1000 *Lots))
        {
         Print ( "We have no money. Free Margin = " ,AccountFreeMargin());
         return ;
        }
       //--- check for long position (BUY) possibility
     if ( iRSI ( NULL , 0 ,OpenLevel, PRICE_LOW , Period )> iRSI ( NULL , 0 ,CloseLevel, PRICE_HIGH ,Period1)) 
        {
         ticket= OrderSend ( Symbol (),OP_BUY,Lots,Ask, 3 ,Bid-TakeProfit* Point ,Bid+TakeProfit* Point , "GBPCADD" ,Magic1, 0 ,Green);
         if (ticket> 0 )
           {
             if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES))
               Print ( "BUY order opened : " ,OrderOpenPrice());
           }
         else
             Print ( "Error opening BUY order : " , GetLastError ());
         return ;
        }
       //--- check for short position (SELL) possibility
       if ( iRSI ( NULL , 0 ,OpenLevel, PRICE_LOW ,Period1)< iRSI ( NULL , 0 ,CloseLevel, PRICE_HIGH , Period )) 
        {
         ticket= OrderSend ( Symbol (),OP_SELL,Lots,Bid, 3 ,Ask+TakeProfit* Point ,Ask-TakeProfit* Point , "GBPCADD" ,Magic1, 0 ,Red);
         if (ticket> 0 )
           {
             if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES))
               Print ( "SELL order opened : " ,OrderOpenPrice());
           }
         else
             Print ( "Error opening SELL order : " , GetLastError ());
        }
       //--- exit from the "no opened orders" block
       return ;
     }
//--- it is important to enter the market correctly, but it is more important to exit it correctly...   
   for (cnt= 0 ;cnt<total;cnt++)
     {
       if (! OrderSelect (cnt,SELECT_BY_POS,MODE_TRADES))
         continue ;
       if (OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()== Symbol ()&& OrderMagicNumber()==Magic1)   // check for symbol
        {
         //--- long position is opened
         if (OrderType()==OP_BUY)
           {
             //--- should it be closed?
               if ( iRSI ( NULL , 0 ,OpenLevel, PRICE_LOW ,Period1)< iRSI ( NULL , 0 ,CloseLevel, PRICE_HIGH , Period )) 
              {
               //--- close order and exit
               if (!OrderClose(OrderTicket(),OrderLots(),Bid, 3 ,Violet))
                   Print ( "OrderClose error " , GetLastError ());
               return ;
              }
             //--- check for trailing stop
             if (TrailingStop> 0 )
              {
               if (Bid-OrderOpenPrice()> Point *TrailingStop)
                 {
                   if (OrderStopLoss()<Bid- Point *TrailingStop)
                    {
                     //--- modify order and exit
                     if (!OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Point *TrailingStop,OrderTakeProfit(), 0 ,Green))
                         Print ( "OrderModify error " , GetLastError ());
                     return ;
                    }
                 }
              }
           }
         else // go to short position
           {
             //--- should it be closed?
           if ( iRSI ( NULL , 0 ,OpenLevel, PRICE_LOW , Period )> iRSI ( NULL , 0 ,CloseLevel, PRICE_HIGH ,Period1)) 
              {
               //--- close order and exit
               if (!OrderClose(OrderTicket(),OrderLots(),Ask, 3 ,Violet))
                   Print ( "OrderClose error " , GetLastError ());
               return ;
              }
             //--- check for trailing stop
             if (TrailingStop> 0 )
              {
               if ((OrderOpenPrice()-Ask)>( Point *TrailingStop))
                 {
                   if ((OrderStopLoss()>(Ask+ Point *TrailingStop)) || (OrderStopLoss()== 0 ))
                    {
                     //--- modify order and exit
                     if (!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ Point *TrailingStop,OrderTakeProfit(), 0 ,Red))
                         Print ( "OrderModify error " , GetLastError ());
                     return ;
                    }
                 }
              }
           }
        }
     }
//---
  }
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//| Подсчет ордеров                                                            |
//+----------------------------------------------------------------------------+
//| -1 - Все типы ордеров                                                      |
//|  0 - ордера типа BUY                                                       |
//|  1 - ордера типа SELL                                                      |
//|  2 - ордера типа BUYLIMIT                                                  |
//|  3 - ордера типа SELLLIMIT                                                 |
//|  4 - ордера типа BUYSTOP                                                   |
//|  5 - ордера типа SELLSTOP                                                  |
//+----------------------------------------------------------------------------+
int CountOrders( string symb= "" , int or_ty=- 1 , int magiс=- 1 ) 
  {
   int cnt= 0 ;
   if (symb== "0" ) symb= _Symbol ;
   for ( int pos= OrdersTotal ()- 1 ;pos>= 0 ;pos--)
     {
       if ( OrderSelect (pos,SELECT_BY_POS)== true )
        {
         if ((OrderSymbol()==symb || symb== "" )&&(or_ty< 0 || or_ty==OrderType()))
           {
             if (magiс< 0 || OrderMagicNumber()==magiс) cnt++;
           }
        }
     }
   return (cnt);
  }

그럼 맞겠죠?

 
darirunu1 :

그럼 맞을까요?

 //--- to simplify the coding and speed up access data are put into internal variables
   if (CountOrders( "" , - 1 ,Magic1)< 1 )
     
   total= OrdersTotal ();
   if (total< 1 )
 
MakarFX :

감사합니다. 어려운 옵션입니다. 몇 줄로 모든 것을 더 간단하게 만들었습니다.

 
darirunu1 :

감사합니다 어려운 선택입니다 몇 줄만 더 간단하게 만들었습니다.

당신이 신경 쓰지 않는지 확인하는 것이 흥미 롭습니다.
 
MakarFX :
당신이 신경 쓰지 않는지 확인하는 것이 흥미 롭습니다.

for(i=k; i>=0; i--) {

if( 주문선택 (i,SELECT_BY_POS, MODE_TRADES )) {

if(OrderSymbol()==Symbol()) {

if(OrderMagicNumber() == 매직) {

if(OrderType()>1) 계속;

if(OrderType()==OP_BUY || OrderType()==OP_SELL) 총++;

}}}}

//---

// 총계=OrdersTotal();

if(총<1)

{

 

안녕하세요! 로봇에서 동일한 기능을 자주 사용하기 때문에 저만의 기능 라이브러리를 만들고 싶었습니다. 모든 것이 제대로 된 것처럼 보였습니다. 라이브러리를 만들어 Libraries 폴더에 넣고 #import를 통해 표시기의 라이브러리를 연결했습니다.

# "andylib.ex4" 가져오기

bool KeyPr(긴 l, 문자열 k);

문자열 TestFunc();

#수입

설명과 함께 라이브러리의 지정된 기능. 그러나 라이브러리의 함수는 호출되지 않습니다. 지표 폴더에 성경을 던지려고 했고, 성경과 소통하는 지표가 있는 곳으로 직접 가도 아무런 성과가 없었습니다. 무엇이 잘못될 수 있습니까?

 
Евгений Гуцу :

안녕하세요! 로봇에서 동일한 기능을 자주 사용하기 때문에 저만의 기능 라이브러리를 만들고 싶었습니다. 모든 것이 제대로 된 것처럼 보였습니다. 라이브러리를 만들어 Libraries 폴더에 넣고 #import를 통해 표시기의 라이브러리를 연결했습니다.

# "andylib.ex4" 가져오기

bool KeyPr(긴 l, 문자열 k);

문자열 TestFunc();

#수입

설명과 함께 라이브러리의 지정된 기능. 그러나 라이브러리의 함수는 호출되지 않습니다. 지표 폴더에 성경을 던지려고 했고, 성경과 소통하는 지표가 있는 곳으로 직접 가도 아무런 성과가 없었습니다. 무엇이 잘못될 수 있습니까?

포함하다

Документация по MQL5: Основы языка / Препроцессор / Включение файлов (#include)
Документация по MQL5: Основы языка / Препроцессор / Включение файлов (#include)
  • www.mql5.com
Включение файлов (#include) - Препроцессор - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
darirunu1 :

for(i=k; i>=0; i--) {

if( 주문선택 (i,SELECT_BY_POS, MODE_TRADES )) {

if(OrderSymbol()==Symbol()) {

if(OrderMagicNumber() == 매직) {

if(OrderType()>1) 계속;

if(OrderType()==OP_BUY || OrderType()==OP_SELL) 총++;

}}}}

//---

// 총계=OrdersTotal();

if(총<1)

{

작성한 내용이 작동하지 않을 수 있습니다.

먼저 "total++"을 계산한 다음 0으로 재설정하고 "OrdersTotal()" 값을 설정합니다. 모든 주문

 
Евгений Гуцу :

안녕하세요! 로봇에서 동일한 기능을 자주 사용하기 때문에 저만의 기능 라이브러리를 만들고 싶었습니다. 모든 것이 제대로 된 것처럼 보였습니다. 라이브러리를 만들어 Libraries 폴더에 넣고 #import를 통해 표시기의 라이브러리를 연결했습니다.

# "andylib.ex4" 가져오기

bool KeyPr(긴 l, 문자열 k);

문자열 TestFunc();

#수입

설명과 함께 라이브러리의 지정된 기능. 그러나 라이브러리의 함수는 호출되지 않습니다. 지표 폴더에 성경을 던지려고 했고, 성경과 소통하는 지표가 있는 곳으로 직접 가도 아무런 성과가 없었습니다. 무엇이 잘못될 수 있습니까?

라이브러리에서 함수명 뒤에 export 쓰는 것을 잊었나요?

그리고 라이브러리가 아닌 .mqh 파일을 만들어 클래스 없이도 함수를 집어넣고 컴파일하는 동안 EA/indicator에서 액세스할 수 있는 필요한 것만 가져오는 것이 좋습니다.
 
각 쌍에 대해 MT5에서 미결 주문에 대한 수수료를 별도로 계산하는 방법은 무엇입니까? 누구에게 해결책이 있습니까