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

[삭제]  
trader781 :
나는 그것을 설명하는 방법을 모른다. 그러나 그것은 확실히 걸작입니다.
나는 여기 그들이 찌르는 것을 좋아한다고 말합니다)) 그리고 Trishkin은 여전히 이것에 기분이 상했습니다 .. 그는 그들이 도울 코드가있을 것이라고 말했습니다 ..
 
Movlat Baghiyev :
나는 여기 그들이 찌르는 것을 좋아한다고 말합니다)) 그리고 Trishkin은 여전히 이것에 기분이 상했습니다 .. 그는 그들이 도울 코드가있을 것이라고 말했습니다 ..

너같은 뉴비인데 나도 궁금한게 많아

for ( int i= 0 ; i< OrdersTotal (); i++)
{
      if ( OrderSelect (i, SELECT_BY_POS )== true )
{
         if ( OrderSymbol ()!= 기호 () || OrderMagicNumber ()!=Magic) 계속 ;
         if ( 주문유형 ()== OP_BUY || 주문 유형 ()== OP_SELL ) p++;
         경우 ( 주문 유형 ()== OP_BUYSTOP )
              if (bue_signal) OrderDelete ( OrderTicket ());
                  그렇지 않으면 b++;
         if ( 주문 유형 ()== OP_SELLSTOP )
              if (sell_signal) OrderDelete ( OrderTicket ());
                  그렇지 않으면 s++;
}

}

1) 어디에서 b++ 를 얻었습니까?

2) 어디에서 s++ 를 얻었습니까?

삼)   if (signal_bue) 이것은 또 무엇입니까?

나머지 코드도 마찬가지입니다. 기분이 상했다면 죄송합니다.

[삭제]  
이것은 아마도 더 나은
//+------------------------------------------------------------------+
//|                                                      ОТЛОЖКИ.mq4 |
//+------------------------------------------------------------------+
extern double StopLoss     = 100 ; //Стоплосс ордера  
extern double TakeProfit   = 150 ; //Тейкпрофит ордера
extern double TrailingStop = 100 ; // трал
extern int     Delta        = 100 ; //Расстояние от цены для установки ордера
extern double LOT          = 0.1 ; //Объём позиции
extern int     Magic        = 2 ;
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   if (TrailingStop!= 0 ) Trailing();
  
   //ИНДИКАТОР RSI
   double RSI0= iRSI ( NULL , 0 , 5 , PRICE_CLOSE , 0 );
   double RSI1= iRSI ( NULL , 0 , 5 , PRICE_CLOSE , 1 );
  
   int b = 0 , s = 0 , p = 0 , res = 0 ;

   double BuyPrice= Ask +Delta* Point ;
   double SellPrice= Bid -Delta* Point ;
  
   for ( int i= 0 ; i< OrdersTotal (); i++)
    {
     if ( OrderSelect (i, SELECT_BY_POS )== true )
      {
         if ( OrderSymbol ()!= Symbol () || OrderMagicNumber ()!=Magic) continue ;
         if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) p++;
         if ( OrderType ()== OP_BUYSTOP )
        {
           if (RSI0< 50 &&RSI1> 50 )
                 OrderDelete ( OrderTicket ());
             else
                b++;
        }
         if ( OrderType ()== OP_SELLSTOP )
        {
           if (RSI0> 50 &&RSI1< 50 )
                 OrderDelete ( OrderTicket ());
               else
                s++;
        }
      }
    }

   double SL,TP; // < !!!!!!!!! эти переменные не используются, можно удалить

//---- buy stop
   if (RSI0> 50 &&RSI1< 50 && p< 1 && b< 1 ) // < !!!!!!!!!
     {
      res= OrderSend ( Symbol (), OP_BUYSTOP ,LOT,BuyPrice, 0 ,BuyPrice-StopLoss* Point ,BuyPrice+TakeProfit* Point , "ОТЛОЖКИ" ,Magic, OP_SELLSTOP ,Blue);
     }        
//---- sell stop  
   if (RSI0< 50 &&RSI1> 50 && p< 1 && s< 1 ) // < !!!!!!!!!
     {
      res= OrderSend ( Symbol (), OP_SELLSTOP ,LOT,SellPrice, 0 ,SellPrice+StopLoss* Point ,SellPrice-TakeProfit* Point , "ОТЛОЖКИ" ,Magic, OP_BUYSTOP ,Red);
     }
//----
   return ( 0 );
}
 
Movlat Baghiyev :
나는 여기 그들이 찌르는 것을 좋아한다고 말합니다)) 그리고 Trishkin은 여전히 이것에 기분이 상했습니다 .. 그는 그들이 도울 코드가있을 것이라고 말했습니다 ..

그래서 더 쉽습니다:

void OrderDelete_( int Type)
  {
   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS )== true )
        {
         if ( OrderSymbol ()!= Symbol () || OrderMagicNumber ()!=Magic) continue ;
         if ( OrderType ()==Type)
             OrderDelete ( OrderTicket ());
        }
     }
  }

이것은 void OnTick() 함수 외부 어딘가에 있습니다.

if (сигнал_bue) OrderDelete_( OP_SELLSTOP );

if (сигнал_sell)OrderDelete_( OP_BUYSTOP );

그리고 이것은 void OnTick() 함수 의 본문에 있습니다.

[삭제]  
Alekseu Fedotov :


그리고 이것은 void OnTick() 함수 의 본문에 있습니다.

코드 수정 부탁드립니다
 
trader781 :

확인.

그는 그가 할 수있는 것을 얻은 것 같습니다. 설명이 이루어졌습니다. 목표는 원하는 대로 작동하지 않는 이유를 이해하는 것입니다.

if () 블록 내부에 else 가 있습니다. 원래 그런 뜻이었나요???

더 나아가. 초기화되지 않은 전역 변수 count는 Counts() 함수에 전달되며, 이 함수도 함수 자체에서 다시 선언됩니다.

Counts() 함수는 주문을 다시 계산하지만 주 함수에서 여러 번 변경되는 일부 티켓과 주문을 비교합니다. 그러나 티켓의 값은 함수가 트리거되는 시점에서 동일합니다. 그렇다면 함수는 얼마나 많은 주문을 계산할까요? 정말 하나 이상입니까?

이 형식의 이 함수는 인수가 필요하지 않습니다. 호출하고 결과를 반환하도록 하십시오.

더 나아가. FindLastOType() 함수는 다시 티켓과의 비교입니다. 올바른 티켓과 비교한다고 보장할 수 있습니까? 필요한 마법과 기호가 있는 첫 번째 주문을 찾았을 때 루프를 깨고 주문 유형을 반환하는 것이 더 쉽지 않을까요?

FindLastOrderOpenPrice() 및 FindLastLot()와 동일합니다.

ModifyOrders() 함수가 너무 무서워서 밤에 악몽을 꾸지 않고 잠들기 위해 오랫동안 그것을 보지 않았습니다 ...

 
Movlat Baghiyev :
코드 수정 부탁드립니다

시도 ^_~

extern double StopLoss     = 100 ; //Стоплосс ордера  
extern double TakeProfit   = 150 ; //Тейкпрофит ордера
extern double TrailingStop = 100 ; // трал
extern int     Delta        = 100 ; //Расстояние от цены для установки ордера
extern double LOT          = 0.1 ; //Объём позиции
extern int     Magic        = 2 ;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- create timer


//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//--- destroy timer


  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
  
   int   res = 0 ;

//ИНДИКАТОР RSI
   double RSI0= iRSI ( NULL , 0 , 5 , PRICE_CLOSE , 0 );
   double RSI1= iRSI ( NULL , 0 , 5 , PRICE_CLOSE , 1 );

   double BuyPrice= Ask +Delta* Point ;
   double SellPrice= Bid -Delta* Point ;
  
//---- buy stop
   if (RSI0> 50 &&RSI1< 50 && Number( OP_BUYSTOP )< 0 && Number( OP_BUY )< 1 ) // < !!!!!!!!!
     {
      res= OrderSend ( Symbol (), OP_BUYSTOP ,LOT,BuyPrice, 0 ,BuyPrice-StopLoss* Point ,BuyPrice+TakeProfit* Point , "ОТЛОЖКИ" ,Magic, OP_SELLSTOP ,Blue);
     }        
//---- sell stop  
   if (RSI0< 50 &&RSI1> 50 && Number( OP_SELLSTOP )< 0 && Number( OP_SELL )< 1 ) // < !!!!!!!!!
     {
      res= OrderSend ( Symbol (), OP_SELLSTOP ,LOT,SellPrice, 0 ,SellPrice+StopLoss* Point ,SellPrice-TakeProfit* Point , "ОТЛОЖКИ" ,Magic, OP_BUYSTOP ,Red);
     }
//----  
  
  
if (RSI0> 50 &&RSI1< 50 ) OrderDelete_( OP_SELLSTOP );

if (RSI0< 50 &&RSI1> 50 )OrderDelete_( OP_BUYSTOP );

  }

//+------------------------------------------------------------------+
void OrderDelete_( int Type)
  {
   bool   r;
   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS )== true )
        {
         if ( OrderSymbol ()!= Symbol () || OrderMagicNumber ()!=Magic) continue ;
         if ( OrderType ()==Type)
          r = OrderDelete ( OrderTicket ());
        }
     }
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int Number( int Type)
  {
   int kp= 0 ;
   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS )== true )
        {
         if ( OrderSymbol ()!= Symbol () || OrderMagicNumber ()!=Magic) continue ;
         if ( OrderType ()==Type)
            kp++;
        }
     }
   return (kp);  
  }
//+------------------------------------------------------------------+
[삭제]  
Alekseu Fedotov 감사합니다. 신이 당신을 지키길..
 
Vitalie Postolache :

if () 블록 내부에 else 가 있습니다. 원래 그런 뜻이었나요???

더 나아가. 초기화되지 않은 전역 변수 count는 Counts() 함수에 전달되며, 이 함수도 함수 자체에서 다시 선언됩니다.

Counts() 함수는 주문을 다시 계산하지만 주 함수에서 여러 번 변경되는 일부 티켓과 주문을 비교합니다. 그러나 티켓의 값은 함수가 트리거되는 시점에서 동일합니다. 그렇다면 함수는 얼마나 많은 주문을 계산할까요? 정말 하나 이상입니까?

이 형식의 이 함수는 인수가 필요하지 않습니다. 호출하고 결과를 반환하도록 하십시오.

더 나아가. FindLastOType() 함수는 다시 티켓과의 비교입니다. 올바른 티켓과 비교한다고 보장할 수 있습니까? 필요한 마법과 기호가 있는 첫 번째 주문을 찾았을 때 루프를 깨고 주문 유형을 반환하는 것이 더 쉽지 않을까요?

FindLastOrderOpenPrice() 및 FindLastLot()와 동일합니다.

ModifyOrders() 함수가 너무 무서워서 밤에 악몽을 꾸지 않고 잠들기 위해 오랫동안 그것을 보지 않았습니다 ...

수정하겠습니다

당신은 그것을 다른 곳에 둘 수 없습니다, 그것은 잘못된 매개 변수가 될 것입니다

가장 최근의 것을 고려해야 함

나는 변화하려고 노력할 것이다

후자의 경우, 음, 예) 표준 OrderModify()로 해결하려고했지만 많은 주문이 지속적으로 동시에 이동되면 계정이 금지됩니다.

비판해 주셔서 감사합니다.

 
spoiltboy :
예, 브래킷으로 밀봉되었습니다. 나머지 질문은 관련이 있습니다.

bool condition;

if (condition) {}

~에 상당하다

if (condition== true ) {}

그리고

if (!condition) {}

~에 상당하다

if (condition== false ) {}

더 짧고 친숙합니다.