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

 
Порт-моне тв :

@MakarFX 감사합니다.... 컴파일시 이런 오류가 있습니다.

'CounterOrderTradeType' - 함수가 정의되지 않았습니다. 많은 expt trade.mq4에 대한 테스트 48 십구

'CounterOrderTradeType' - 전역, 네임스페이스 또는 클래스 범위에서만 함수 선언이 허용됩니다. 많은 expt trade.mq4에 대한 테스트 141 5


노란색으로 강조 표시된 것을 수정하십시오


 //+------------------------------------------------------------------+
//|                                                   sova_2bars.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict

extern int Magic = 64777 ;
extern double Lot = 0.01 ;
extern int Slippage = 3 ;
extern int TakeProfit = 1600 ;
extern int StopLoss = 800 ;
extern int Experation = 0 ; 

int OrderOfSymbol;
//+------------------------------------------------------------------+
....
 //+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  { 
   OrderOfSymbol=CounterOrderTradeType(- 1 );

...

//-------------функции---------------------------------------

if ( Ask> 0 && Bid > 0 )
   {

 if (OrderOfSymbol< 1 )
     if (Close[ 1 ]>Open[ 1 ])
     if (Bears < - 0.00035 && MiddleBB > Ask)
         {
    ticket = OrderSend ( Symbol (),OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, "открыт ордер на покупку" , Magic, 0 , Blue);
         }
         
   
if (OrderOfSymbol== 1 )
   if (Bulls > 0.00035 && MiddleBB < Ask && Bears > 0 && Opentwo < Closetwo && Openthree < Closethree && BigTrand < Ask)
    CloseBuyPositions1();
   } 
//+------------------------------------------------------------------+
//| Подсчет ордеров потекущему символу                               |
//+------------------------------------------------------------------+
int CounterOrderTradeType( ENUM_ORDER_TYPE order_type)
   {
   int cnt= 0 ;
   //----
   for ( int pos= OrdersTotal ()- 1 ;pos>= 0 ;pos--)
      {
       if ( OrderSelect (pos, SELECT_BY_POS, MODE_TRADES)== false ) continue ;
       if (OrderSymbol()!= _Symbol ) continue ;
       if (order_type == OrderType() || order_type == - 1 ) cnt++;
      }
   //----
   return (cnt);
   }
 
MakarFX :

노란색으로 강조 표시된 것을 수정하십시오


나는 우리가 이러한 세그먼트에 대해 이야기하고 있다는 것을 깨달았고 변수를 다시 선언하려고 시도했지만 도움이 되지 않았습니다. 제가 mql4에 있다면(5번이 익숙하지 않아서 차이점이 있다면) 다시 도움을 요청합니다
 
Порт-моне тв :
나는 우리가 이러한 세그먼트에 대해 이야기하고 있다는 것을 깨달았고 변수를 다시 선언하려고 시도했지만 도움이 되지 않았습니다. 제가 mql4에 있다면(5번이 익숙하지 않아서 차이점이 있다면) 다시 도움을 요청합니다
나에게 밝혀진 코드를 줘, 무엇이 잘못되었는지 볼게
 
MakarFX :
나에게 밝혀진 코드를 줘, 나는 무엇이 잘못되었는지 볼 것이다
//+----------------------------------------------- --------------------+
//| sova_2bars.mq4 |
//| Copyright 2020, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+----------------------------------------------- --------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#속성 링크 "https://www.mql5.com"
#속성 버전 "1.00"
#속성엄격

extern int 매직 = 64777;
외부 이중 로트 = 0.01;
extern int 미끄러짐 = 3;
외부 정수 TakeProfit = 1600;
extern int 손절매 = 800;
외부 경험 = 0;

double Openone, //첫 번째 캔들의 시가
Opentwo, //두 번째 캔들의 시가
Closeone, //첫 번째 캔들의 종가
Closetwo, //두 번째 캔들의 종가
Lowone, //첫 번째 캔들의 최저가
Lowtwo, //두 번째 양초의 낮은 가격
Lowthree, //세 번째 캔들의 최소 가격
Openthree, //세 번째 캔들의 시가
Closethree, //세 번째 캔들의 종가
CloseOrder, //주문 마감
Highone, //첫 번째 캔들의 높은 가격
Hightwo, //두 번째 양초의 높은 가격
Highthree, //두 번째 캔들의 최고가
Highfour, //두 번째 캔들의 최대 가격
Highfive, //두 번째 캔들의 최대 가격
Highsix, //두 번째 캔들의 최대 가격
Highseven, //두 번째 캔들의 최대 가격
Higheight, //두 번째 캔들의 최대 가격
Lowfour, // 네 번째 캔들의 낮은 가격
Lowfive, // 다섯 번째 양초의 낮은 가격
Lowsix, // 여섯 번째 캔들의 최소 가격
Lowseven, // 일곱 번째 캔들의 저가
Loweight, // 여덟 번째 캔들의 최저 가격
Closefour, // 네 번째 캔들의 종가
오픈 포,
낮은 15,
낮은 25,
SLbuy, TPbuy, SLsell, TPsell, // 네 번째 캔들의 시가
주문오픈가격;
int 티켓, 티켓 닫기;
정수 OrderOfSymbol;

//+----------------------------------------------- --------------------+
//| 전문가 초기화 기능 |
//+----------------------------------------------- --------------------+
int OnInit()
{
반환(INIT_SUCCESSED);
}
//+----------------------------------------------- --------------------+
//| 전문적인 초기화 해제 기능 |
//+----------------------------------------------- --------------------+
무효 OnDeinit(const int 이유)
{
}
//+----------------------------------------------- --------------------+
//| 전문가 틱 기능 |
//+----------------------------------------------- --------------------+
무효 OnTick()
{
OrderOfSymbol=CounterOrderTradeType(-1);
//--- 필요한 막대의 가격 결정
Openone = NormalizeDouble(iOpen(Symbol(), Period(), 0), Digits);
Highone = NormalizeDouble(iHigh(Symbol(), Period(), 0), Digits);
Hightwo = NormalizeDouble(iHigh(Symbol(), Period(), 1), Digits);
Highthree = NormalizeDouble(iHigh(Symbol(), Period(), 2), Digits);
Highfour = NormalizeDouble(iHigh(Symbol(), Period(), 3), Digits);
Highfive = NormalizeDouble(iHigh(Symbol(), Period(), 4), Digits);
Highsix = NormalizeDouble(iHigh(Symbol(), Period(), 5), Digits);
Highseven = NormalizeDouble(iHigh(Symbol(), Period(), 6), Digits);
Higheight = NormalizeDouble(iHigh(Symbol(), Period(), 7), Digits);
Opentwo = NormalizeDouble(iOpen(Symbol(), 기간(), 1), 숫자);
Openthree = NormalizeDouble(iOpen(Symbol(), 기간(), 2), 숫자);
Openfour = NormalizeDouble(iOpen(Symbol(), Period(), 3), 숫자);
Closeone = NormalizeDouble(iClose(Symbol(), Period(), 0), Digits);
Closetwo = NormalizeDouble(iClose(Symbol(), Period(), 1), Digits);
Closethree = NormalizeDouble(iClose(Symbol(), Period(), 2), Digits);
Closefour = NormalizeDouble(iClose(Symbol(), Period(), 3), Digits);
Lowone = NormalizeDouble(iLow(Symbol(), Period(), 0), Digits);
Lowtwo = NormalizeDouble(iLow(Symbol(), Period(), 1), Digits);
Lowthree = NormalizeDouble(iLow(Symbol(), Period(), 2), Digits);
Lowfour = NormalizeDouble(iLow(Symbol(), Period(), 3), Digits);
Lowfive = NormalizeDouble(iLow(Symbol(), Period(), 4), Digits);
Lowsix = NormalizeDouble(iLow(Symbol(), Period(), 5), Digits);
Lowseven = NormalizeDouble(iLow(Symbol(), Period(), 6), Digits);
Low15 = NormalizeDouble(iLow(Symbol(), Period(), 14), Digits);
Low25 = NormalizeDouble(iLow(Symbol(), Period(), 24), Digits);

//---- 표시기 - 조건--------------------------------


이중 BigTrand = iMA(NULL, 0,50,0,MODE_SMA, PRICE_CLOSE, 1);
이중 SmallTrand = iMA(NULL, 0,5,0,MODE_SMA, PRICE_CLOSE, 1);
이중 LowerBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_LOWER,1);
이중 UpperBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_UPPER,1);
이중 MiddleBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_MAIN,1);
이중 곰 = iBearsPower(_Symbol,_Period, 5, PRICE_CLOSE,0);
더블 불스 = iBullsPower(_Symbol,_Period, 5, PRICE_CLOSE,0);
이중 파라브 = iSAR(_Symbol,_Period,0.002, 1, 0);

SLbuy = NormalizeDouble(Ask - StopLoss*Point, 5);
TPbuy = NormalizeDouble(Ask + TakeProfit*Point, 5);
SLsell = NormalizeDouble(Bid + StopLoss*Point, 5);
TPsell = NormalizeDouble(Bid - TakeProfit*Point, 5);


//-------------함수----------------------------------- ------




if (요청>0 && 입찰>0)
{

if(주문 합계()<1)
if (닫기[1]>열기[1])
if(질문>낮추기BB)
{
티켓 = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, " 구매 주문 열기", Magic, 0, Blue);
}
if (OrdersTotal()==1)
if(입찰가>상한BB)
CloseBuyPositions1();
}

//+----------------------------------------------- --------------------+
//| 현재 기호에 대한 계산 순서 |
//+----------------------------------------------- --------------------+
int CounterOrderTradeType(ENUM_ORDER_TYPE order_type)
{
정수 cnt=0;
//----
for(int pos=OrdersTotal()-1;pos>=0;pos--)
{
if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)==false) 계속;
if(OrderSymbol()!=_Symbol) 계속;
if(order_type == OrderType() || order_type == -1) cnt++;
}
//----
리턴(cnt);
}


//---- 함수의 끝
}
//------------------------------------------------ ----------------------
CloseBuyPositions1() 무효화
{
for(int i = OrdersTotal() - 1, i >= 0, i--)
if(주문선택(i, SELECT_BY_POS, MODE_TRADES))
if(OrderMagicNumber() == 매직)
if(주문 기호() == 기호())
{


if(주문 유형()==OP_BUY)
{
OrderClose(OrderTicket(), OrderLots(), 입찰, 3, NULL);
}
}
}




Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
One Click Close The script allows users to easily close positions if their profit/loss reaches or exceeds a value specified in pips. Please set slippage value first. Sometimes some positions do not close due to high volatility of the market. Please set larger slippage or restart the script. The free demo version is: ...
 
Порт-моне тв :

브래킷이 없었습니다 ... 캐치

 //+------------------------------------------------------------------+
//|                                                   sova_2bars.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict

extern int Magic = 64777 ;
extern double Lot = 0.01 ;
extern int Slippage = 3 ;
extern int TakeProfit = 1600 ;
extern int StopLoss = 800 ;
extern int Experation = 0 ;

double Openone,     //цена открытия первой свечи
Opentwo,     //цена открытия второй свечи
Closeone,   //цена закрытия первой свечи
Closetwo,   //цена закрытия второй свечи
Lowone,     //цена минимальная первой свечи
Lowtwo,     //цена минимальная второй свечи
Lowthree,   //цена минимальная третьей свечи
Openthree,   //цена открытия третьей свечи
Closethree, //цена закрытия третьей свечи
CloseOrder, //закрыть ордер
Highone,     //цена максимальная первой свечи
Hightwo,     //цена максимальная второй свечи
Highthree,     //цена максимальная второй свечи
Highfour,     //цена максимальная второй свечи
Highfive,     //цена максимальная второй свечи
Highsix,     //цена максимальная второй свечи
Highseven,     //цена максимальная второй свечи
Higheight,     //цена максимальная второй свечи
Lowfour,     //цена минимальная четвертой свечи
Lowfive,     //цена минимальная пятой свечи
Lowsix,     //цена минимальная шестой свечи
Lowseven,     //цена минимальная седьмой свечи
Loweight,     //цена минимальная восьмой свечи
Closefour,   //цена закрытия четвертой свечи
Openfour,
Low15,
Low25, 
SLbuy, TPbuy,  SLsell, TPsell,   //цена открытия четвертой свечи
OrderOpenPrice;
int ticket, ticketclose; 
int OrderOfSymbol;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
  OrderOfSymbol=CounterOrderTradeType(- 1 ); 
//--- определение цен необходимых баров
   Openone = NormalizeDouble ( iOpen ( Symbol (), Period (), 0 ), Digits );
   Highone = NormalizeDouble ( iHigh ( Symbol (), Period (), 0 ), Digits );
   Hightwo = NormalizeDouble ( iHigh ( Symbol (), Period (), 1 ), Digits );
   Highthree = NormalizeDouble ( iHigh ( Symbol (), Period (), 2 ), Digits );
   Highfour = NormalizeDouble ( iHigh ( Symbol (), Period (), 3 ), Digits );
   Highfive  = NormalizeDouble ( iHigh ( Symbol (), Period (), 4 ), Digits );
   Highsix  = NormalizeDouble ( iHigh ( Symbol (), Period (), 5 ), Digits );
   Highseven = NormalizeDouble ( iHigh ( Symbol (), Period (), 6 ), Digits );
   Higheight = NormalizeDouble ( iHigh ( Symbol (), Period (), 7 ), Digits );
   Opentwo = NormalizeDouble ( iOpen ( Symbol (), Period (), 1 ), Digits );
   Openthree = NormalizeDouble ( iOpen ( Symbol (), Period (), 2 ), Digits );
   Openfour = NormalizeDouble ( iOpen ( Symbol (), Period (), 3 ), Digits );
   Closeone = NormalizeDouble ( iClose ( Symbol (), Period (), 0 ), Digits );
   Closetwo = NormalizeDouble ( iClose ( Symbol (), Period (), 1 ), Digits );
   Closethree = NormalizeDouble ( iClose ( Symbol (), Period (), 2 ), Digits );
   Closefour = NormalizeDouble ( iClose ( Symbol (), Period (), 3 ), Digits );
   Lowone = NormalizeDouble ( iLow ( Symbol (), Period (), 0 ), Digits );
   Lowtwo = NormalizeDouble ( iLow ( Symbol (), Period (), 1 ), Digits );
   Lowthree = NormalizeDouble ( iLow ( Symbol (), Period (), 2 ), Digits );
   Lowfour = NormalizeDouble ( iLow ( Symbol (), Period (), 3 ), Digits );
   Lowfive = NormalizeDouble ( iLow ( Symbol (), Period (), 4 ), Digits );
   Lowsix = NormalizeDouble ( iLow ( Symbol (), Period (), 5 ), Digits );
   Lowseven = NormalizeDouble ( iLow ( Symbol (), Period (), 6 ), Digits );
   Low15 = NormalizeDouble ( iLow ( Symbol (), Period (), 14 ), Digits );
   Low25 = NormalizeDouble ( iLow ( Symbol (), Period (), 24 ), Digits );

     
//----индикатор - условия--------------------------------------


double BigTrand = iMA ( NULL , 0 , 50 , 0 , MODE_SMA , PRICE_CLOSE , 1 );
double SmallTrand = iMA ( NULL , 0 , 5 , 0 , MODE_SMA , PRICE_CLOSE , 1 );
double LowerBB = iBands ( _Symbol , _Period , 17 , 1 , 0 , PRICE_CLOSE ,MODE_LOWER, 1 );
double UpperBB = iBands ( _Symbol , _Period , 17 , 1 , 0 , PRICE_CLOSE ,MODE_UPPER, 1 );
double MiddleBB = iBands ( _Symbol , _Period , 17 , 1 , 0 , PRICE_CLOSE ,MODE_MAIN, 1 );
double Bears = iBearsPower ( _Symbol , _Period , 5 , PRICE_CLOSE , 0 );
double Bulls = iBullsPower ( _Symbol , _Period , 5 , PRICE_CLOSE , 0 );
double Parab = iSAR ( _Symbol , _Period , 0.002 , 1 , 0 );

SLbuy = NormalizeDouble (Ask - StopLoss* Point , 5 ); 
TPbuy = NormalizeDouble (Ask + TakeProfit* Point , 5 );
SLsell = NormalizeDouble (Bid + StopLoss* Point , 5 ); 
TPsell = NormalizeDouble (Bid - TakeProfit* Point , 5 );


//-------------функции---------------------------------------
            
if ( Ask> 0 && Bid > 0 )
   {

 if ( OrdersTotal ()< 1 )
     if (Close[ 1 ]>Open[ 1 ])
     if (Ask>LowerBB)
         {
    ticket = OrderSend ( Symbol (),OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, "открыт ордер на покупку" , Magic, 0 , Blue);
         }
         
   
if ( OrdersTotal ()== 1 )
   if (Bid>UpperBB)
    CloseBuyPositions1();
   }
}
//----конец функции
//---------------------------------------------------------------------
void CloseBuyPositions1()
      {
      
       for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
         if (OrderMagicNumber() == Magic)
             if (OrderSymbol() == Symbol ())
              {


          
           if (OrderType()==OP_BUY)
             {
               if (OrderClose(OrderTicket(), OrderLots(), Bid, 3 , NULL )){ Print ( "Order Close" );}
             }
          }
       } 
//+------------------------------------------------------------------+
//| Подсчет ордеров потекущему символу                               |
//+------------------------------------------------------------------+
int CounterOrderTradeType( ENUM_ORDER_TYPE order_type)
   {
   int cnt= 0 ;
   //----
   for ( int pos= OrdersTotal ()- 1 ;pos>= 0 ;pos--)
      {
       if ( OrderSelect (pos, SELECT_BY_POS, MODE_TRADES)== false ) continue ;
       if (OrderSymbol()!= _Symbol ) continue ;
       if (order_type == OrderType() || order_type == - 1 ) cnt++;
      }
   //----
   return (cnt);
   }   
       
 
Порт-моне тв :

나는 이것을 이해하지 못한다

 if ( Ask> 0 && Bid > 0 )

왜요?

 
MakarFX :

나는 이것을 이해하지 못한다

왜요?

다시 한 번 모든 대괄호와 함께 추가 기능을 처방하지 않고 여전히 몇 가지 일반적인 기능을 채점한 다음 이 기능에 대한 지표로 실험하여 일반적으로 이해할 수 있는 값을 변경합니다.
 
Порт-моне тв :
다시 한 번 모든 대괄호를 사용하여 추가 기능을 작성하지 않고 몇 가지 일반적인 기능에 점수를 매긴 다음 이 기능에 대한 표시기로 실험합니다.

나는 그렇게 할 것이다

 //-------------функции---------------------------------------
            
 if (OrderOfSymbol< 1 )
     if (Close[ 1 ]>Open[ 1 ])
       if (Ask>LowerBB)
         {
         if ( OrderSend ( Symbol (),OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, "открыт ордер на покупку" , Magic, 0 , Blue)){ Print ( "Buy Order Open" );}
         }
         
   for ( int pos= 0 ;pos< OrdersTotal ();pos++)
       if ( OrderSelect (pos,SELECT_BY_POS,MODE_TRADES))
         if (OrderSymbol()== _Symbol )
             if (Bid>UpperBB)
               CloseBuyPositions1();
   }
//----конец функции
 
MakarFX :

Мне вот это не понятно

зачем?


문제가 해결되지 않았고, 한 차트에서 주문을 열었고, 두 번째 차트에서는 원하지 않음, 모든 사람에 대해 OrdersTotal 을 분명히 다시 고려합니다(마술사가 무언가를 변경하면 별도의 고문을 컴파일하기도 함).

 
Порт-моне тв :

문제가 해결되지 않았고, 한 차트에서 주문을 열었고, 두 번째 차트에서는 원하지 않음, 모든 사람에 대해 OrdersTotal을 분명히 다시 고려합니다(마술사가 무언가를 변경하면 별도의 고문을 컴파일하기도 함).

내 게시물의 기능을 넣으십시오. 나를 위해 일한다