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

 

if (OrderBuy< 1 && rsi>Urov_70 && rsi1<Urov_70)
{
tiket= OrderSend ( _Symbol , OP_BUY , Lot, Ask ,slippage,sl,tp, NULL ,MagicNumber, 0 , clrBlue );
}
    if (주문판매< 1 && rsi<Urov_30 && rsi1>Urov_30)
{
tiket= OrderSend ( _Symbol , OP_SELL , Lot, Bid ,slippage,sl,tp, NULL ,MagicNumber, 0 , clrRed );
}

하지만 당신은 필요

if (OrderBuy< 1 && rsi>Urov_70 && rsi1<Urov_70)
{
tiket= OrderSend ( _Symbol , OP_BUY , Lot, Ask ,slippage, slBuy , tpBuy, NULL , MagicNumber, 0 , clrBlue );
}
    if (주문판매< 1 && rsi<Urov_30 && rsi1>Urov_30)
{
tiket= OrderSend ( _Symbol , OP_SELL , Lot, Bid , Slippage, slSell , tpSell , NULL , MagicNumber, 0 , clrRed );
}

 
Ibragim Dzhanaev :

도움이되지 않았습니다 (

double tp,sl,OrderBuy= 0 ,OrderSell= 0 ;
double slSell,slBuy,tpSell,tpBuy;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {

   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
         if ( OrderSymbol ()== _Symbol && OrderMagicNumber ()==MagicNumber)
           {
             if ( OrderType ()== OP_BUY ){}
             if ( OrderType ()== OP_SELL ){}
           }
     }
   double rsi= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 0 );
   double rsi1= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 1 );
//+------------------------------------------------------------------+

   double StopLossLevel;
   double TakeProfitLevel;
   if (StopLoss> 0 ) StopLossLevel= Bid -StopLoss* Point ; else StopLossLevel= 0.0 ;
   if (TakeProfit> 0 ) TakeProfitLevel= Ask +TakeProfit* Point ; else TakeProfitLevel= 0.0 ;

   tpBuy= NormalizeDouble ( Ask +TakeProfit* _Point , _Digits );
   slBuy= NormalizeDouble ( Bid -StopLoss* _Point , _Digits );

   tpSell= NormalizeDouble ( Bid -TakeProfit* _Point , _Digits );
   slSell= NormalizeDouble ( Ask +StopLoss* _Point , _Digits );
///---
   if (OrderBuy< 1 && rsi>Urov_70 && rsi1<Urov_70)
     {
      tiket= OrderSend ( _Symbol , OP_BUY ,Lot, Ask ,slippage,sl,tp, NULL ,MagicNumber, 0 , clrBlue );      
     }      
   if (OrderSell< 1 && rsi<Urov_30 && rsi1>Urov_30)
     {
      tiket= OrderSend ( _Symbol , OP_SELL ,Lot, Bid ,slippage,sl,tp, NULL ,MagicNumber, 0 , clrRed );      
     }
  }
//+------------------------------------------------------------------+


이 코드로 무엇을 원하십니까?

무엇을, 무엇이 도움이 되지 않았습니까?

 
RichLux :

if (OrderBuy< 1 && rsi>Urov_70 && rsi1<Urov_70)
{
tiket= OrderSend ( _Symbol , OP_BUY , Lot, Ask ,slippage,sl,tp, NULL ,MagicNumber, 0 , clrBlue );
}
    if (주문판매< 1 && rsi<Urov_30 && rsi1>Urov_30)
{
tiket= OrderSend ( _Symbol , OP_SELL , Lot, Bid ,slippage,sl,tp, NULL ,MagicNumber, 0 , clrRed );
}

하지만 당신은 필요

if (OrderBuy< 1 && rsi>Urov_70 && rsi1<Urov_70)
{
tiket= OrderSend ( _Symbol , OP_BUY , Lot, Ask ,slippage, slBuy , tpBuy, NULL , MagicNumber, 0 , clrBlue );
}
    if (주문판매< 1 && rsi<Urov_30 && rsi1>Urov_30)
{
tiket= OrderSend ( _Symbol , OP_SELL , Lot, Bid , Slippage, slSell , tpSell , NULL , MagicNumber, 0 , clrRed );
}

각 눈금 이 열릴 때(

double tp,sl,OrderBuy= 0 ,OrderSell= 0 ;
double slSell,slBuy,tpSell,tpBuy;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {

   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
         if ( OrderSymbol ()== _Symbol && OrderMagicNumber ()==MagicNumber)
           {
             if ( OrderType ()== OP_BUY ){}
             if ( OrderType ()== OP_SELL ){}
           }
     }
   double rsi= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 0 );
   double rsi1= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 1 );
//+------------------------------------------------------------------+

   double StopLossLevel;
   double TakeProfitLevel;
   if (StopLoss> 0 ) StopLossLevel= Bid -StopLoss* Point ; else StopLossLevel= 0.0 ;
   if (TakeProfit> 0 ) TakeProfitLevel= Ask +TakeProfit* Point ; else TakeProfitLevel= 0.0 ;

   tpBuy= NormalizeDouble ( Ask +TakeProfit* _Point , _Digits );
   slBuy= NormalizeDouble ( Bid -StopLoss* _Point , _Digits );

   tpSell= NormalizeDouble ( Bid -TakeProfit* _Point , _Digits );
   slSell= NormalizeDouble ( Ask +StopLoss* _Point , _Digits );
///---
   if (OrderBuy< 1 && rsi>Urov_70 && rsi1<Urov_70)
     {
      tiket= OrderSend ( _Symbol , OP_BUY ,Lot, Ask ,slippage,slBuy,tpBuy, NULL ,MagicNumber, 0 , clrBlue );      
     }      
   if (OrderSell< 1 && rsi<Urov_30 && rsi1>Urov_30)
     {
      tiket= OrderSend ( _Symbol , OP_SELL ,Lot, Bid ,slippage,slSell,tpSell, NULL ,MagicNumber, 0 , clrRed );      
     }
  }
//+------------------------------------------------------------------+
 
Artyom Trishkin :

이 코드로 무엇을 원하십니까?

그리고 무엇이 도움이 되지 않았습니까?

코드에 무슨 문제가 있습니까?

각 틱마다 열리지 않아야 합니다.

 
Ibragim Dzhanaev :
코드에 무슨 문제가 있습니까?

그래, 다 틀렸어

결과적으로 아무 것도 하지 않고 반환하지 않는 경우 위치 검색 루프가 필요한 이유는 무엇입니까?

0 값이 1 미만인 변수를 확인하고 모든 틱 에서 열리지 않을 것으로 예상하는 이유는 무엇입니까?

예, 그리고 솔직히 말하면 많은 부조리 ...

 

나는 같은 문제가 있습니다. 테스터에서는 매 틱마다 열립니다.

일할 수 있는 최소 주문량에 목발을 댔지만 이건 패치일 뿐 그 이상은 아니다

 
trader781 :

나는 같은 문제가 있습니다. 테스터에서는 매 틱마다 열립니다.

일할 수 있는 최소 주문량에 목발을 댔지만 이건 패치일 뿐 그 이상은 아니다

열린 위치의 수를 올바르게 계산하면 목발이 필요하지 않습니다.
 
Artyom Trishkin :

그래, 다 틀렸어

결과적으로 아무 것도 하지 않고 반환하지 않는 경우 위치 검색 루프가 필요한 이유는 무엇입니까?

0 값이 1 미만인 변수를 확인하고 모든 틱 에서 열리지 않을 것으로 예상하는 이유는 무엇입니까?

예, 그리고 솔직히 말하면 많은 부조리 ...

필요에 따라 제출하십시오.

진작 알았다면 했을 텐데.

 
Artyom Trishkin :
열린 위치의 수를 올바르게 계산하면 목발이 필요하지 않습니다.

그들은 전혀 제한되어서는 안됩니다.

짧은 상태


void OnTick()

  { 

 

 

 

if( OrdersTotal ()== 0 ) //+-------------если количество ордеров равно 0
       {
         if (( MathAbs (ma2-ma4)> 100 * _Point )
            && ( MathAbs ( Bid -ma3)> 100 * Point ())
            && (ma31>ma32>ma33)) //+-----покупка по 6+50
           {
            ticket= OrderSend ( Symbol (), OP_BUY ,Lots, Ask , 50 , 0 , 0 , "" ,Magic, 0 , clrAzure ); //+------отправка 1 ордера
           }
         if (( Bid + 1000 * Point )>ma3 && ( Bid >ma1) && ( Bid >ma2)) //+-------------условие продажи
           {
            ticket= OrderSend ( Symbol (), OP_SELL ,Lots, Bid , 50 , 0 , 0 , "" ,Magic, 0 , clrAzure ); //+-----отправка 1 ордера
           }
         if (ticket== 0 )
           {
             return ;
           }
        }

       //+---------------------------------------------------------если уже есть

        
         if (FindLastOType()== OP_BUY )
           {
             if ( Ask <=FindLastOrderOpenPrice()-Step* Point ()) //+------------если ордер в минус
              {
               ticket= OrderSend ( Symbol (), OP_BUY ,(FindLastLot()*Martin), Ask , 50 , 0 , 0 , "" ,Magic, 0 , clrAzure );
              }
             else
             if ( Ask >=FindLastOrderOpenPrice()+Step* Point ()) //+------------если ордер в плюс
              {
               ticket= OrderSend ( Symbol (), OP_BUY ,(FindLastLot()*Martin), Ask , 50 , 0 , 0 , "" ,Magic, 0 , clrAzure );
              }
           }

         if (FindLastOType()== OP_SELL )
           {

             if ( Bid >=FindLastOrderOpenPrice()+Step* Point ()) //+------------если ордер в минус
              {
               ticket= OrderSend ( Symbol (), OP_SELL ,(FindLastLot()*Martin), Bid , 50 , 0 , 0 , "" ,Magic, 0 , clrLightGray );
              }
             else
             if ( Bid <=FindLastOrderOpenPrice()-Step* Point ()) //+------------если ордер в плюс
              {
               ticket= OrderSend ( Symbol (), OP_SELL ,(FindLastLot()*Martin), Bid , 50 , 0 , 0 , "" ,Magic, 0 , clrLightGray );
              }
          
        
     }
   Trailingall();
  }
시작 단계를 무시할 필요가 없으며 비용은 5 자리 또는 3자리 200입니다.
 

나는 이것을했고, 이제는 모든 틱마다 열리지 않지만 진입 신호를 건너 뜁니다 ...

double tp,sl,OrderBuy= 0 ,OrderSell= 0 ;
double slSell,slBuy,tpSell,tpBuy,TotalBiu,TotalSell;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {

   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) //Цикл по всем ордерам
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ) && OrderSymbol ()== Symbol () && OrderMagicNumber ()==MagicNumber) //Выбрали ордер
        {
         if ( OrderType ()== OP_BUY )
           {
            TotalBiu++;                       //Кол. покупок
           }
         if ( OrderType ()== OP_SELL )
           {
            TotalSell++;                     //Кол. продаж
           }
        }
     }
   double rsi= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 0 );
   double rsi1= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 1 );
//+------------------------------------------------------------------+

   double StopLossLevel;
   double TakeProfitLevel;
   if (StopLoss> 0 ) StopLossLevel= Bid -StopLoss* Point ; else StopLossLevel= 0.0 ;
   if (TakeProfit> 0 ) TakeProfitLevel= Ask +TakeProfit* Point ; else TakeProfitLevel= 0.0 ;

   tpBuy= NormalizeDouble ( Ask +TakeProfit* _Point , _Digits );
   slBuy= NormalizeDouble ( Bid -StopLoss* _Point , _Digits );

   tpSell= NormalizeDouble ( Bid -TakeProfit* _Point , _Digits );
   slSell= NormalizeDouble ( Ask +StopLoss* _Point , _Digits );
///---
if (TotalBiu== 0 )
   if (OrderBuy< 1 && rsi>Urov_70 && rsi1<Urov_70)
     {
      tiket= OrderSend ( _Symbol , OP_BUY ,Lot, Ask ,slippage,slBuy,tpBuy, NULL ,MagicNumber, 0 , clrBlue );      
     }
       if (TotalSell== 0 )    
   if (OrderSell< 1 && rsi<Urov_30 && rsi1>Urov_30)
     {
      tiket= OrderSend ( _Symbol , OP_SELL ,Lot, Bid ,slippage,slSell,tpSell, NULL ,MagicNumber, 0 , clrRed );      
     }
  }
//+------------------------------------------------------------------+