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

 
SanAlex # :

코드에서 - 여기에서 숫자를 선택하십시오.

경고와 함께 신호 표시기에서. 여기에 더 많은 신호가 있습니다 - 몇 줄 제거


고맙습니다!
 

안녕하세요!

올빼미를 조금 복잡하게하기로 결정했습니다.

후행과 같은 작업을 수행하고 싶지만 싱글/더블 액션만 가능합니다.

아이디어:

가격이 테이크 스톱 쪽으로 75% 이동했습니다(예: 20p 감소). 테이크가 20p 증가했습니다.

가격이 90%를 넘어 테이크 스톱을 향해 30p 감소했습니다. 테이크가 10p 증가했습니다.

나는 이와 같은 다이어그램을 본다 (..... function...) => (TP - Mparametr)

어디에: TP - 이익을 얻 습니다.

Mparametr - 어드바이저의 외부 변수(예: 포인트 수)에서 설정됩니다.

어떤 기능을 통해 해결할 것인가?

사전 정의된 변수 입찰가에 대해 읽고 질문하십시오. 이 변수부터 시작해야 합니까? 매수는 매도 , 매도는 매도 에 의해 실행되기 때문에

아니면 MarketInfo 또는 SymbolInfoTick을 통해 조치를 취해야 합니까?

비슷한 솔루션이 있지만 중지 및 테이크의 오프셋은 로트 크기에 따라 다릅니다.

   if ((iOTy == OP_BUY)&& (LOT()>LotControl))
             {
              dSL = NormalizeDouble (dOOP - StopLoss * Point +DownLoss * Point , Digits );
              dTP = NormalizeDouble (dOOP + TakeProfit * Point +DownProfit * Point , Digits );

               bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0 , clrNONE );
             }

비슷한 일을 하고 싶습니다. 비교적 간단합니다.


MarketInfo - Получение рыночной информации - Справочник MQL4
MarketInfo - Получение рыночной информации - Справочник MQL4
  • docs.mql4.com
MarketInfo - Получение рыночной информации - Справочник MQL4
 
Tretyakov Rostyslav # :

그 쯤

일반적으로, 나는 거의 일주일 동안 이 스코어보드를 썼고, 그것이 문제입니다. 또한 가격에 도달했을 때 한 포인트 더 낮은 진입 시 아날로그로 버튼을 닫는 일종의 가장 보류 수준을 설정했다면, 그런 다음 어떤 이유로 위의 작업을 수행해야 하는 버튼을 누르지 않고 묻지 않고 자동으로 닫힙니다(누른 후 레벨에 도달하면 이론상 필요함)


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

  
  
  
//--- 
     ObjectCreate ( 0 , "Button_1" , OBJ_BUTTON , 0 , 0 , 0 );
   ObjectSetInteger ( 0 , "Button_1" , OBJPROP_XDISTANCE , 20 );
   ObjectSetInteger ( 0 , "Button_1" , OBJPROP_YDISTANCE , 120 );
   ObjectSetInteger ( 0 , "Button_1" , OBJPROP_XSIZE , 100 );
   ObjectSetInteger ( 0 , "Button_1" , OBJPROP_YSIZE , 20 );
   ObjectCreate ( 0 , "Label_1" , OBJ_LABEL , 0 , 0 , 0 );
   ObjectSetInteger ( 0 , "Label_1" , OBJPROP_XDISTANCE , 20 );
   ObjectSetInteger ( 0 , "Label_1" , OBJPROP_YDISTANCE , 40 );
   ObjectSetInteger ( 0 , "Label_1" , OBJPROP_CORNER , CORNER_LEFT_UPPER );
   ObjectSetString ( 0 , "Label_1" , OBJPROP_TEXT , "Price" );
   ObjectSetInteger ( 0 , "Label_1" , OBJPROP_COLOR , clrBlack );
   
   
   //--- CLOSE BUY +1
   ObjectCreate ( 0 , "Button_21" , OBJ_BUTTON , 0 , 0 , 0 );
   ObjectSetInteger ( 0 , "Button_21" , OBJPROP_XDISTANCE , 240 );
   ObjectSetInteger ( 0 , "Button_21" , OBJPROP_YDISTANCE , 120 );
   ObjectSetInteger ( 0 , "Button_21" , OBJPROP_XSIZE , 100 );
   ObjectSetInteger ( 0 , "Button_21" , OBJPROP_YSIZE , 20 );
   ObjectSetString ( 0 , "Button_21" , OBJPROP_TEXT , "CLOSE BUY +1" );
   ObjectSetInteger ( 0 , "Button_21" , OBJPROP_BGCOLOR ,Beige);
   ObjectSetInteger ( 0 , "Button_21" , OBJPROP_COLOR ,Green);
   ObjectCreate ( 0 , "Label_21" , OBJ_LABEL , 0 , 0 , 0 );
   ObjectSetInteger ( 0 , "Label_21" , OBJPROP_XDISTANCE , 20 );
   ObjectSetInteger ( 0 , "Label_21" , OBJPROP_YDISTANCE , 40 );
   ObjectSetInteger ( 0 , "Label_21" , OBJPROP_CORNER , CORNER_LEFT_UPPER );
   ObjectSetInteger ( 0 , "Label_21" , OBJPROP_COLOR , clrBlack );
//---
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
  {
//---
   if (sparam== "Button_1" )
     {
       ObjectSetString ( 0 , "Label_1" , OBJPROP_TEXT , DoubleToString (Ask- 1 * _Point , Digits ));
       Comment ( "цена на момент нажатия кнопки: " +Ask, " ждем цены для входа: " +(Ask- 1 * _Point ));
     }
     
         if (sparam== "Button_21" )
     {

       ObjectSetString ( 0 , "Label_21" , OBJPROP_TEXT , DoubleToString (Bid+ 1 * _Point , Digits ));
      ObjectSetText( "MSG" , "цена Bid в момент нажатия кнопки: " + DoubleToString (Bid, Digits ), 8 , "Verdana" , White);
      ObjectSetText( "MSG2" , "ждем цены Bid для закрытия: " + DoubleToString (Bid+ 1 * _Point , Digits ), 8 , "Verdana" , White);

     }
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   int ticket;
   double price= StringToDouble ( ObjectGetString ( 0 , "Label_1" , OBJPROP_TEXT ));
   if (Ask<=price)
     {
      ticket = OrderSend ( _Symbol ,OP_BUY, 0.01 ,Ask, 0 , 0 , 0 , NULL , 0 , 0 , clrGreen );
       ObjectSetString ( 0 , "Label_1" , OBJPROP_TEXT , DoubleToString ( DBL_MAX , Digits ));
       ObjectSetInteger ( 0 , "Button_1" , OBJPROP_STATE , false );
       Comment ( "цена ожидания была: " +price, " зашли по: " +Ask, " TakeProfit на: " +(Ask+ 4 * _Point ));
     }
     
     
     
       //-----close buy +1

   double priceclosebuyplus1= StringToDouble ( ObjectGetString ( 0 , "Label_21" , OBJPROP_TEXT ));
   if (Bid>=priceclosebuyplus1)
     {

      
       ObjectSetString ( 0 , "Label_21" , OBJPROP_TEXT , DoubleToString ( DBL_MAX , Digits ));
       ObjectSetInteger ( 0 , "Button_21" , OBJPROP_STATE , false );
      ObjectSetText( "MSG" , "ожидали цену закрытия Bid: " + DoubleToString (priceclosebuyplus1, Digits ), 8 , "Verdana" , White);
      ObjectSetText( "MSG2" , "закрыли по цене Bid: " + DoubleToString (Bid, Digits ), 8 , "Verdana" , White);
      CloseBuyPositions1();
     }
     
     
     
  }
  
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseBuyPositions1()
  {

   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))



         if (OrderType()==OP_BUY)
           {
             if (OrderClose(OrderTicket(), OrderLots(), Bid, 3 , NULL ))
              {
               Print ( "Order Close" );
              }
           }

  }

내가 그것을 알아낼 수 있도록 도와주세요

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

일반적으로, 나는 거의 일주일 동안 이 스코어보드를 썼고, 그것이 문제입니다. 또한 가격에 도달했을 때 한 포인트 더 낮은 진입 시 아날로그로 버튼을 닫는 일종의 가장 보류 수준을 설정했다면, 그런 다음 어떤 이유로 위의 작업을 수행해야 하는 버튼을 누르지 않고 묻지 않고 자동으로 닫힙니다(누른 후 레벨에 도달하면 이론상 필요함)


내가 그것을 알아낼 수 있도록 도와주세요


 if (Bid>=priceclosebuyplus1 &&priceclosebuyplus1> 0 )
 
законопослушный гражданин # :

안녕하세요!

올빼미를 조금 복잡하게하기로 결정했습니다.

후행과 같은 작업을 수행하고 싶지만 싱글/더블 액션만 가능합니다.

아이디어:

가격은 테이크 스톱 쪽으로 75% 이동했으며 (예를 들어) 20p 감소했습니다. 테이크가 20p 증가했습니다.

가격이 90%를 넘어 테이크 스톱을 향해 30p 감소했습니다. 테이크가 10p 증가했습니다.


 int TakeProfit= 200 ;
int StopLoss  = 100 ;
//+----------------------------------------------------------------------------+
void TrailingOrders()
  {
   for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
        {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
           {
             if (OrderType() == OP_BUY)
              {
               if (Bid >= OrderOpenPrice()+(TakeProfit* 0.75 * _Point ) && OrderStopLoss()<OrderOpenPrice()- 20 * _Point )
                 {
                   if (OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss()+ 20 * _Point , OrderTakeProfit()+ 20 * _Point , 0 ))
                     Print ( "Модификации ордера на покупку успешна!" );
                   else
                     Print ( "Ошибка модификации ордера на покупку! - " , GetLastError ());
                 }
               if (Bid >= OrderOpenPrice()+(TakeProfit* 0.9 * _Point ) && OrderStopLoss()>=OrderOpenPrice()- 20 * _Point )
                 {
                   if (OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss()+ 30 * _Point , OrderTakeProfit()+ 10 * _Point , 0 ))
                     Print ( "Модификации ордера на покупку успешна!" );
                   else
                     Print ( "Ошибка модификации ордера на покупку! - " , GetLastError ());
                 }
              }
           }
        }
     }
  }
 
Tretyakov Rostyslav # :

감사하다. 흥미로운. 나는 그것을 알아 내려고 노력할 것입니다!

그것은 밝혀   if (Bid 는 현재 가격 매개 변수입니다. 이것은 어떤 식으로든 호출되지 않습니다. 특정 값을 그것과 비교할 수 있습니까?

Bid의 측정 단위는 틱입니까? (돈으로 표현되지 않음)

 
Tretyakov Rostyslav # :


감사하다! 이 문제가 사라졌습니다. 작은 흔적을 남겼습니다. 모든 주문이 마감될 때마다(항상 모든 것이 필수입니다!) 하지만 가끔 3~4개의 주문을 열면 2~1개만 마감될 수 있습니다.이렇게 마감이 발생합니다. 특별한 i번째 수표가 가치가 있는 것처럼 말해줄 수 있습니까?

 //+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseBuyPositions1()
  {

   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))



         if (OrderType()==OP_BUY)
           {
             if (OrderClose(OrderTicket(), OrderLots(), Bid, 0 , NULL ))
              {
               Print ( "Order Close" );
              }
           }

  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseSellPositions2()
  {

   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))



         if (OrderType()==OP_SELL)
           {
             if (OrderClose(OrderTicket(), OrderLots(), Ask, 0 , NULL ))
              {
               Print ( "Order Close" );
              }
           }

  }
//+------------------------------------------------------------------+
 
законопослушный гражданин # :

감사하다. 흥미로운. 나는 그것을 알아 내려고 노력할 것입니다!

그것은 밝혀   if (Bid 는 현재 가격 매개 변수입니다. 이것은 어떤 식으로든 호출되지 않습니다. 특정 값을 그것과 비교할 수 있습니까?

Bid의 측정 단위는 틱입니까? (돈으로 표현되지 않음)

Bid현재 가격 이므로 시가 +/- 조건과 비교해야 합니다.

에 관한 한 Bid나 Ask 모두 틱으로 측정되지 않습니다. Tiki는 새로운 가격의 도래입니다.

 
Tretyakov Rostyslav # :

Bid현재 가격 이므로 시가 +/- 조건과 비교해야 합니다.

에 관한 한 Bid나 Ask 모두 틱으로 측정되지 않습니다. Tiki는 새로운 가격의 도래입니다.

당연하게도. 그러면 무엇을 측정합니까? 포인트/핍?

 
законопослушный гражданин # :

당연하게도. 그러면 무엇을 측정합니까? 포인트/핍?

MarketInfo( _Symbol ,MODE_TICKSIZE);