MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1829

 
SanAlex # :

kodunuzda - sayıları buradan alın

sinyal göstergesinde - bir uyarı ile. daha fazla sinyal almak için burada - birkaç satırı kaldırın


Teşekkür ederim!
 

merhaba!

baykuşları biraz karmaşıklaştırmaya karar verdi.

Takip etmek gibi bir şey yapmak istiyorum ama sadece tek/çift eylem

fikir:

fiyat %75 kalkış noktasına doğru hareket etti - (örneğin) 20p azaldı. ve alma 20p arttı.

fiyat, kalkış noktasına doğru %90'ı geçti (örneğin) 30p azaldı. ve alma 10p arttı.

Bunun gibi bir diyagram görüyorum (..... function...) => (TP - Mparametre)

nerede: TP - kar al

Mparametre - danışmanın harici değişkenlerinde ayarlanır (örneğin, puan sayısı)

çözmek için hangi işlevler aracılığıyla?

önceden tanımlanmış değişkenler teklifini okuyun, sorun - onlardan başlamalı mıyım? alış satış sor ile, satış ise teklifle yapıldığından

yoksa MarketInfo veya SymbolInfoTick aracılığıyla mı hareket etmeniz gerekiyor?

Benim de benzer bir çözümüm var, ancak orada dur ve al ofseti parti büyüklüğüne bağlı:

   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 );
             }

Ben benzer bir şey yapmak istiyorum. görece basit.


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

ya da öyle

genel olarak, bu çeteleyi neredeyse bir hafta boyunca yazdım ve sorun bu, eğer en çok bekleyen seviyeyi, fiyata ulaşıldığında bir puan daha düşük olan girişte bir analog ile düğmenin bir tür kapanmasına da koyarsam, daha sonra nedense sormadan, bunu bir nokta yukarıda yapması gereken bir düğmeye basmadan otomatik olarak kapanır (bastıktan sonra ve seviyeye ulaştıktan sonra, teoride olduğu gibi)


 //+------------------------------------------------------------------+
//| 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" );
              }
           }

  }

çözmeme yardım et

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

genel olarak, bu çeteleyi neredeyse bir hafta boyunca yazdım ve sorun bu, eğer en çok bekleyen seviyeyi, fiyata ulaşıldığında bir puan daha düşük olan girişte bir analog ile düğmenin bir tür kapanmasına da koyarsam, daha sonra nedense sormadan, bunu bir nokta yukarıda yapması gereken bir düğmeye basmadan otomatik olarak kapanır (bastıktan sonra ve seviyeye ulaştıktan sonra, teoride olduğu gibi)


çözmeme yardım et


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

merhaba!

baykuşları biraz karmaşıklaştırmaya karar verdi.

Takip etmek gibi bir şey yapmak istiyorum ama sadece tek/çift eylem

fikir:

fiyat %75'lik hareketle durma noktasına doğru hareket etti (örneğin) 20p azaldı. ve alma 20p arttı.

fiyat, kalkış noktasına doğru %90'ı geçti (örneğin) 30p azaldı. ve alma 10p arttı.


 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 # :

teşekkür etmek. ilginç. Çözmeye çalışacağım!

şekline dönüştü   (Teklif geçerli fiyat parametresiyse - ki bu hiçbir şekilde çağrılmaz - sadece belirli değerleri onunla karşılaştırmak mümkün müdür?

ve Teklif için ölçü birimleri keneler mi? (para ile ifade edilmez)

 
Tretyakov Rostyslav # :


teşekkür etmek! bu sorun ortadan kalktı. küçük bir iz bıraktı. her sipariş kapandığında (her şeyin her zaman olması gerekiyor!) ama bazen 3-4 sipariş açsam sadece 2 yada 1 tane kapanabiliyor.kapanış bu şekilde oluyor. özel bir i-th çekine değer gibi, bana söyleyebilir misin?

 //+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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" );
              }
           }

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

teşekkür etmek. ilginç. Çözmeye çalışacağım!

şekline dönüştü   (Teklif geçerli fiyat parametresiyse - ki bu hiçbir şekilde çağrılmaz - sadece belirli değerleri onunla karşılaştırmak mümkün müdür?

ve Teklif için ölçü birimleri keneler mi? (para ile ifade edilmez)

Teklif geçerli fiyattır , bu nedenle açılış fiyatı +/- koşuluyla karşılaştırmanız gerekir

Tikler söz konusu olduğunda, ne Bid ne de Ask tik olarak ölçülmez. Tiki, yeni bir fiyatın gelişidir.

 
Tretyakov Rostyslav # :

Teklif geçerli fiyattır , bu nedenle açılış fiyatı +/- koşuluyla karşılaştırmanız gerekir

Tikler söz konusu olduğunda, ne Bid ne de Ask tik olarak ölçülmez. Tiki, yeni bir fiyatın gelişidir.

anlaşılır bir şekilde. o zaman ne ölçülür puan/pip olarak?

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

anlaşılır bir şekilde. o zaman ne ölçülür puan/pip olarak?

MarketInfo( _Symbol ,MODE_TICKSIZE);