[ARŞİV!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 4. - sayfa 279

 
drknn :


buraya baktın mı? https://book.mql4.com/en/samples/index

Genel olarak, diğer herhangi bir program gibi, sizinki de her biri belirli bir görevi yerine getiren ayrı bloklardan oluşacaktır. Böyle bir blok alıyoruz ve kodu kendimiz yazıyoruz, hatalarını ayıklıyoruz ve sonra bir sonraki bloğa geçiyoruz. Ve böylece programın sonuna kadar.

Teşekkürler, bir bakacağım...
 
evillive :

Güzel gün!

Böyle bir şey varsa lütfen bana daireyi belirlemenin güvenilir bir yolunu söyleyin.

Orada. Haftada, temelinde de dahil olmak üzere gerçek ücret alıyorum.
 
evillive :

Güzel gün!
Böyle bir şey varsa lütfen bana daireyi belirlemenin güvenilir bir yolunu söyleyin.

Daire, bir veya daha fazla daire elemanından oluşan bir fiyat hareketidir.
Yassı eleman, fiyat başlangıç noktasından herhangi bir yönde hareket ettiğinde oluşan fiyat hareketinin bir elemanıdır. sonraki fiyat geri dönüşü bu noktaya.

 

Komut sipariş vermek için kullanılır

tikett= OrderSend ( Symbol (), OP_SELLSTOP,  volume*A, Price -otstup* Point , Point * 3 ,R2, Price-takeprofit* Point -otstup* Point , "OP_SELLSTOP" , 2000 ,  expiration, C'0,128,255' );

Burada OrderSend, robotun emir vermesi için bir komuttur, ilk pozisyona parantez içinde bir döviz çifti girilir. () sembolü buraya girilir , bu fonksiyon danışmanın bağlı olduğu çifti verir. Ardından ticaret işleminin adı. Sonra partinin hacmi, burada değişkenler benimkinde çoğalıyor. Fiyat, o zaman hatırlamıyorum, bir tür tolerans, 3 puan, sonra zararı durdur, kârı al, bir isim (isim), sonra sihirli sayı - seçtiğin herhangi bir sayı, sonra hatırlamıyorum, sonra renk . Tüm isimler bu sırayla. tikett= olmadan da mümkündür, sadece OrderSend.

Ve işte, dikkat! Sipariş, yalnızca başlangıca sığacaksa, yüzlerce siparişe kadar her onay için verilecektir. Gerektiğinde siparişin verilebilmesi için şartlar gereklidir. Misal.

 for ( i= OrdersTotal ();i> 0 ;i--){ OrderSelect (i- 1 ,SELECT_BY_POS ); //Alert ("OrderType( )", OrderType( ));
 if ( OrderMagicNumber ( )== 2000 && OrderSymbol ()== Symbol ()) { 
if ( OrderType ( ) ==OP_SELLSTOP) { Y++;}
if ( OrderType ( ) ==OP_SELL) { Y++;}}}
Y=Y-dolivka1; //Alert ("Y++", Y," dolivka1 ",dolivka1);
 if (Y<= 0 ){ // Alert ("Y", Y );
   tikett= OrderSend ( Symbol (), OP_SELLSTOP,  volume*A, Price -otstup* Point , Point * 3 ,R2, Price-takeprofit* Point -otstup* Point , "OP_SELLSTOP" , 2000 ,  expiration, C'0,128,255' );
   // Alert ("OP_SELLSTOP", GetLastError( )); 
    Error= GetLastError ( ); } J= 0 ;

   if (Error != 0 ) { Print ( " Error OP_SELLSTOP " , Error , "tikett" ,tikett, " volume*A " ,volume*A, " Price -otstup*Point " ,Price -otstup* Point , " Price-takeprofit*Point-otstup*Point " ,Price-takeprofit* Point -otstup* Point , 
   " Ask " , Ask , " Bid " , Bid );
   Error= 0 ;}

Yorgun. Yardımı kullanın, hazır örnekleri sökün.

 
drknn :


buraya baktın mı? https://book.mql4.com/en/samples/index

Genel olarak, diğer herhangi bir program gibi, sizinki de her biri belirli bir görevi yerine getiren ayrı bloklardan oluşacaktır. Böyle bir blok alıyoruz ve kodu kendimiz yazıyoruz, hatalarını ayıklıyoruz ve sonra bir sonraki bloğa geçiyoruz. Ve böylece programın sonuna kadar.


Yine de soruyu daha net bir şekilde ortaya koymaya çalışacağım... Uzman Danışmanım başarılı bir şekilde bekleyen BİR emir açar ve bir süre sonra değiştirmesi gerekir... Bunu yapmak için endeks veya pozisyon numarasını bilmeniz gerekir. bekleyen siparişler. Bu pozisyon numarasını veya indeksini nasıl alabilirim??? For döngüsünü kullanarak siparişleri sıralamak gerekli mi??? Sonuçta, BİR siparişim var ... İşte çalışmayan programımın kodunun bir parçası


if (OrderSelect (1, SELECT_BY_POS, MODE_TRADES)==true)

{bilet = OrderTicket();

dönüş();}

Nasıl daha iyi yazabilirim?

 
AlexLaptist :


Yine de soruyu daha net bir şekilde ortaya koymaya çalışacağım... Uzman Danışmanım başarılı bir şekilde bekleyen BİR emir açar ve bir süre sonra değiştirmesi gerekir... Bunu yapmak için endeks veya pozisyon numarasını bilmeniz gerekir. bekleyen siparişler. Bu pozisyon numarasını veya indeksini nasıl alabilirim??? For döngüsünü kullanarak siparişleri sıralamak gerekli mi??? Sonuçta, BİR siparişim var ... İşte boşta kalan programımın kodunun bir parçası


if (OrderSelect (1, SELECT_BY_POS, MODE_TRADES)==true)

{bilet = OrderTicket();

dönüş();}

Nasıl daha iyi yazabilirim?


OrderSend() işlevi, başarılı bir şekilde yürütülürse, az önce açtığı siparişin bilet numarasını döndürür - bu, sunucudaki seri numarasıdır ve orada böyle bir sipariş yoktur. Bu nedenle, ikinci bir sipariş sıralaması düzenlemeye gerek yoktur - sadece biletini hatırlayın. Siparişi açtıktan hemen sonra hatırlayın.

 int Ticket= OrderSend ();
if (Ticket< 0 ){
// тут принтуем сообщение об ошибке.
}
// Вам нужно всё равно создать счётчик ордеров, который обнулит переменную Ticket в том случае, если ордера в рынке больше нет.
 
drknn :


OrderSend() işlevi, başarılı bir şekilde yürütülürse, az önce açtığı siparişin bilet numarasını döndürür - bu, sunucudaki seri numarasıdır ve orada böyle bir sipariş yoktur. Bu nedenle, ikinci bir sipariş sıralaması düzenlemeye gerek yoktur - sadece biletini hatırlayın. Bir sipariş açtıktan hemen sonra hatırlayın .

Ve onu ne kadar "hatırlayacağız"? Onu kaybedebilirsin...

IMHO - ihtiyaç duyduğunuzda her zaman taze ve güncel bilgileri almalı ve duruma bağlı olarak bellekte saklamamalısınız.

Yine de, bir şansı ummaktansa, değiştirmeden hemen önce bir sipariş bulmak daha iyidir ... Belki güç kapatılmaz, örneğin ...

 
AlexLaptist :


Yine de soruyu daha net bir şekilde ortaya koymaya çalışacağım... Uzman Danışmanım başarılı bir şekilde bekleyen BİR emri açar ve bir süre sonra değiştirmesi gerekir... bekleyen siparişler. Bu pozisyon numarasını veya indeksini nasıl alabilirim??? For döngüsünü kullanarak siparişleri sıralamak gerekli mi??? Sonuçta, BİR siparişim var ... İşte boşta kalan programımın kodunun bir parçası


if (OrderSelect (1, SELECT_BY_POS, MODE_TRADES)==true)

{bilet = OrderTicket();

dönüş();}

Nasıl daha iyi yazabilirim?

Belki şöyle bir şey:

 //+----------------------------------------------------------------------------+
int TicketLastSetOrder( string sy, int mn) { // 
   datetime t;
   int       i, op, ticket=- 1 ;
   for (i= 0 ; i< OrdersTotal (); i++) {
       if ( OrderSelect (i, SELECT_BY_POS)) {
         op= OrderType ();
         if ( OrderMagicNumber ()!=mn)   continue ;
         if ( OrderSymbol ()!=sy)         continue ;
         if (op< 2 || op> 5 )             continue ;
         if ( OrderOpenTime ()>t)  {
            t= OrderOpenTime ();
            ticket= OrderTicket ();
            }
         }
       else Print ( "FUNC TicketLastSetOrder(): Error select order: " + GetLastError ());
      }
   return (ticket);
}
//+----------------------------------------------------------------------------+

Son verilen siparişin biletini döndürür veya -1

Ararken, danışmanın istediğiniz sembolünü ve büyüsünü belirtin, örneğin:

   int TicketMyOrder=TicketLastSetOrder( Symbol (), Magic);

İşlev, geçerli semboldeki en son verilen bekleyen siparişin biletini döndürür (sizin durumunuzda, tek). Magic - danışmanınızın sihirli numarası

 

Bir bileti global değişkenlere itmek mümkündür. :) Genelde cehennemi korkutabilirsin. Ancak bir fikir olarak, değişiklikten önce bir sipariş seçmek işe yarayacaktır. Bu sadece, aynı zamanda, siparişin tüm ömrü boyunca lotların yalnızca 1 kez sıfırlanması gerekmiyorsa (aynı anda tek bir değişiklikle) :)

Kısacası çok seçenek var :)

 

Lütfen söyle bana. Hala bir şekilde göstergelerin nasıl çalıştığını tam olarak anlamadım. Burada göstergem zaman çerçevesini değiştirirken çizmiyor ve bu yüzden her seferinde çiziyor. Ama bazen çizer ve ne istediğim hakkında! Lütfen bana neyin eksik olduğunu söyle.

 //+------------------------------------------------------------------+
//|                                            ИндюкДимонакомпил.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"
#import "user32.dll"
   int    PostMessageA( int   hWnd, int   Msg, int   wParam, string lParam);
#import
#define WM_COMMAND                     0x0111
int delimiter = 0 ;

#property indicator_chart_window

#property indicator_buffers 3
#property indicator_color1 Green
#property indicator_color2 Red
#property indicator_color3 DarkBlue
double ВерхняячертаBuffer1[];
double НижняячертаBuffer2[];
double СинняячертаBuffer3[];
 double вершина; 
 double основание_первого_снижения;
 double начало;
 double вершина_волны_3;
 extern int T= 4 ,K= 200 ;
 int timeframe, start ;
 int бар_вершина ;
 int бар_основание_первого_снижения;
 int бар_начало;
int pereklutsatel;
double naklon,linija2; int P; extern int RO=- 1 ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators

SetIndexStyle ( 0 , DRAW_SECTION , STYLE_SOLID , 2 , CLR_NONE ); //Alert ("SetIndexStyle ",GetLastError( ) );
   SetIndexBuffer ( 0 ,ВерхняячертаBuffer1); //Alert ("SetIndexBuffer ",GetLastError( ) );
   SetIndexEmptyValue ( 0 , 0.0 );
   
   SetIndexStyle ( 1 , DRAW_SECTION , STYLE_SOLID , 2 , CLR_NONE ); //Alert ("SetIndexStyle ",GetLastError( ) );
   SetIndexBuffer ( 1 ,НижняячертаBuffer2); //Alert ("SetIndexBuffer ",GetLastError( ) ); 
   SetIndexEmptyValue ( 1 , 0.0 );
   
   SetIndexStyle ( 2 , DRAW_SECTION , STYLE_SOLID ,T, CLR_NONE ); //Alert ("SetIndexStyle ",GetLastError( ) );
   SetIndexBuffer ( 2 ,СинняячертаBuffer3); //Alert ("SetIndexBuffer ",GetLastError( ) ); 
   SetIndexEmptyValue ( 2 , 0.0 );
   
   
   ObjectDelete ( "вершина" );
   ObjectDelete ( "основание_первого_снижения  " );
   ObjectDelete ( "начало" );
     ObjectDelete ( "точка4" );
     ObjectDelete ( "пятая_точка!" );
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   ObjectDelete ( "вершина" );
   ObjectDelete ( "основание_первого_снижения  " );
   ObjectDelete ( "начало" );
     ObjectDelete ( "точка4" );
     ObjectDelete ( "пятая_точка!" );
   ObjectsDeleteAll ( WindowOnDropped ( ) , OBJ_TEXT );
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int     counted_bars= IndicatorCounted ();
   int limit= Bars -counted_bars- 1 ;

   for ( int i=limit;i>= 0 ;i--) {
//----
 for ( int J= 0 ;J<=RO;J++){
//----

   // for(int i=Bars; i>=0;i--)
   i= Bars ;
      бар_вершина= iHighest ( NULL ,  timeframe, MODE_HIGH, K, start ) ;
       вершина =High[ бар_вершина ];
       бар_основание_первого_снижения= iLowest ( NULL ,  timeframe, MODE_LOW, NormalizeDouble ( бар_вершина/ 2 , 0 ), start ) ;
       основание_первого_снижения=Low[ бар_основание_первого_снижения ];
       бар_начало= iLowest ( NULL ,  timeframe, MODE_LOW, NormalizeDouble (бар_вершина* 1.5 , 0 ), бар_вершина ) ;
       начало=Low[ бар_начало ];
       
   ObjectCreate ( "вершина" ,   OBJ_TEXT , WindowOnDropped ( ) , Time[бар_вершина],  вершина+( 10 * Point )) ; 
     ObjectSetText ( "вершина" , "вершина" , 5 , "вершина" , Crimson ) ; // Alert("GetLastError()",GetLastError());
       // ObjectSet(  "вершина",  OBJPROP_COLOR, Crimson) ;
      
   ObjectCreate ( "основание_первого_снижения" ,   OBJ_TEXT , WindowOnDropped ( ) , Time[бар_основание_первого_снижения],  основание_первого_снижения-( 10 * Point )) ; 
     ObjectSetText ( "основание_первого_снижения" , "основание_первого_снижения" , 5 , "основание_первого_снижения" , Crimson ) ;   
   
     ObjectCreate ( "начало" ,   OBJ_TEXT , WindowOnDropped ( ) , Time[бар_начало],  начало-( 10 * Point )) ; 
     ObjectSetText ( "начало" , "начало" , 5 , "начало" , Crimson ) ;   
           
   if (начало>основание_первого_снижения){naklon=(начало-основание_первого_снижения)/(бар_начало-бар_основание_первого_снижения);
 // Alert("naklon  ", naklon);
    НижняячертаBuffer2[бар_начало]=начало;linija2=начало; for (i=бар_начало- 1 ;i>= 0 ;i--){linija2=linija2-naklon;
   
    НижняячертаBuffer2[i]=linija2;   // Alert ("linija2  " , linija2 ); 
     Alert ( "НижняячертаBuffer2[i]  " , НижняячертаBuffer2[i] , "  i " , i);
     
   }
    НижняячертаBuffer2[бар_основание_первого_снижения]=основание_первого_снижения;}
    
    
         for (i= 0 ;i< 100 ;i++){  СинняячертаBuffer3[i]= Open[i];}
           for (i= 330 ;i< 500 ;i++){  СинняячертаBuffer3[i]= Open[i];}

     ВерхняячертаBuffer1[бар_начало]=начало;
     
 double точка 4 ; int бар_точка 4 ;   бар_точка 4 = iHighest ( NULL ,  timeframe, MODE_HIGH, бар_основание_первого_снижения, 3 ) ; 
  точка 4 =High[ бар_точка 4 ];  
   
   if (вершина>точка 4 ){naklon=(начало-точка 4 )/(бар_начало-бар_точка 4 );
   ObjectCreate ( "точка4" ,   OBJ_TEXT , WindowOnDropped ( ) , Time[бар_точка 4 ],  точка 4 +( 10 * Point )) ; 
     ObjectSetText ( "точка4" , "точка4" , 5 , "точка4" , Crimson ) ;  
   double linija1=начало; for (i=бар_начало- 1 ;i>= 0 ;i--){linija1=linija1-naklon;ВерхняячертаBuffer1[i]=linija1; }}
   
double vulf=НижняячертаBuffer2[ 0 ];
   if ( vulf==Ask||vulf==Bid){vulf= 1 ;}
 if (vulf+( 10 * Point )>Ask&&vulf-( 10 * Point )<Bid){vulf= 1 ;} 
           
       Alert ( "vulf  " , vulf );   Comment ( "  vulf!!! "   , vulf);  
   if (vulf== 1 ){ Comment ( "  Есть вульв!!! "   , "  timeframe " , timeframe);
   ObjectCreate ( "пятая_точка!" ,   OBJ_TEXT , WindowOnDropped ( ) , Time[ 0 ],  Bid-( 10 * Point )) ; 
     ObjectSetText ( "пятая_точка!" , "пятая_точка!" , 5 , "пятая_точка!" , Crimson ) ;   return ( 0 );  }
     if (vulf!= 1 ) {    
   
     if (delimiter< 3 ){delimiter++; Comment (delimiter); return ( 0 );}
   delimiter= 0 ;
    fChangePeriod();P++;
                                 
                   }  } }
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+

void fChangePeriod(){ int ii,hwd = WindowHandle ( Symbol (), Period ());
   switch ( Period ()){
       case PERIOD_W1     : ii = 33134 ; break ; //PERIOD_D1;
       case PERIOD_D1     : ii = 33136 ; break ; //PERIOD_H4;
       case PERIOD_H4     : ii = 33135 ; break ; //PERIOD_H1;
       case PERIOD_H1     : ii = 33140 ; break ; //PERIOD_M30;
       case PERIOD_M30    : ii = 33139 ; break ; //PERIOD_M15;
       case PERIOD_M15    : ii = 33138 ; break ; //PERIOD_M5;
       case PERIOD_M5     : ii = 33137 ; break ; //PERIOD_M1;
       case PERIOD_M1     : ii = 33141 ; break ; //PERIOD_W1;
   }     
   PostMessageA(hwd, WM_COMMAND, ii, 0 );
   return ;
}