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

 
hoz :


Pekala, fi_Ticket parametresine gerek yok demek istemedim ama neden varsayılan olarak 0 (sıfır) değeri atanmış. Ben sadece şunu yapardım:

Kaynak kodunu tekrar kopyalayacağım:

Bu fonksiyon, bir enstrüman hakkında (örneğin bir emire atıfta bulunmadan, örneğin bir emir açmadan önce) ve aynısı, ancak belirli bir emirle bağlantılı olarak (bunun yanındayken) alım satım bilgilerini almanızı sağlar. Varsayılan değer, işlevin kullanım kolaylığı için kullanılır. Alım satım işlemleri kitaplığı başlatılırken negatif bir fi_Ticket değeri kullanılır.

PS Ve başlamak için, değişkenlerin adına veya daha doğrusu öneklerine dikkat edin. bs_Symbol gibi b ile başlayan değişkenler kitaplıktan genel düzeyde bildirilir. Çoğu global değişken , b-PSI@Base içinde bildirilir.

 

Lütfen danışmanın koduna bakın, sebebinin ne olduğunu anlayamıyorum .... İlk başlangıçta, hemen bir ticaret açabilir, ancak kapattıktan sonra çalışmayı durdurur, terminalin bir sonraki yeniden başlatılmasına kadar veya açık / kapalı, danışmanın ticaret yapmasına izin verin ... Gann 2.0 göstergesi üzerinde çalışır

 extern string      s0                = "Setup: Main" ;
extern int         Magic             = 1121 ;
extern double      lots              = 0.1 ;
extern int         StopLoss          = 70 ;
extern int         TakeProfit        = 140 ;
extern bool        UseTrail          = true ;
extern bool        TrailWhileMinus   = false ;
extern int         Trail             = 70 ;

extern string      s1                = "Setup: GANN indicator" ;
extern bool UseBeginDate = false ;
extern string BeginDate = "2010.01.01 00:00" ;
extern int nBarsBack = 120 ; //250;
extern string prices = "0=close, 4=median, 5=typical" ;
extern int Price_Mode = 5 ;
extern bool Show_GridMatrix = false ;
extern bool Show_GannGrid = false ;
extern bool Show_HiloArrows = true ;
extern bool Show_PriceArrows = true ;
extern bool Show_Comments = false ;
extern string ____MainGrid____ = "ooo" ;
extern color MainGrid_Color = Silver; //Green;//Sienna;
extern int MainGrid_Style = STYLE_DOT ;
extern int MinMaxGrid_Style = STYLE_SOLID ;
extern int MainGrid_Width = 1 ;
extern int fontSize = 8 ;
extern bool Draw_AllGrids = false ;
extern bool Draw_AdditionalGrids = false ;
extern string ____GannGrid____ = "ttt" ;
extern color GannGrid_Color = Silver; //Gray;
extern int GannGrid_Style = STYLE_DOT ;
extern int GannGrid_Width = 177 ;
extern string ____Default_GridParameters____ = "Recomanded GridInterval 35 or 36" ;
extern int MainGrid_Intervals = 3677 ;   //default=35(!)
extern double GannGrid_Interval = 8.0 ; //with default 8.5 is the time interval not OK; and 9 is too large
extern int Text_Shift = 50 ;

//s1, UseBeginDate, BeginDate, nBarsBack, prices, Price_Mode, Show_GridMatrix, Show_GannGrid, Show_HiloArrows, Show_PriceArrows, Show_Comments, ____MainGrid____, MainGrid_Style, MinMaxGrid_Style, MainGrid_Width, fontSize, Draw_AllGrids, Draw_AdditionalGrids, ____GannGrid____, GannGrid_Style, GannGrid_Width, ____Default_GridParameters____, MainGrid_Intervals, GannGrid_Interval, Text_Shift

int                slip              = 3 ;

int Ticket[ 1000 ];

void deinit() 
{
   SemaphoreDeinit( "TRADECONTEXT" );

   return ( 0 );
}


int start()
{
   static datetime TimeFlag = 0 ;
   datetime         TimeLast = Time[ 0 ];
   if (TimeFlag < TimeLast)
   {
      TimeFlag = TimeLast;
      
       int GANN = GetSignal_GANN();
      
      AnalyzeSignals(GANN);
      
       if (UseTrail == true ) TrailAllOrders();
   }
   return ( 0 );
}



void AnalyzeSignals( int GANN)
{
   static int ticket = 0 ;
   int sig = - 1 ;
   bool res;
   
   ticket = RefreshTicket(ticket);
   
   if (GANN == OP_BUY)
      sig = OP_BUY;
   else if (GANN == OP_SELL)
      sig = OP_SELL;   

   if (ticket != 0 )
   {
       OrderSelect (ticket, SELECT_BY_TICKET);      
       int type = OrderType();
      
       if (sig == OP_BUY && type == OP_SELL)
      {
         SemaphoreTake( "TRADECONTEXT" ); 
         res = OrderClose(ticket, OrderLots(), Ask, slip);
         SemaphoreReturn( "TRADECONTEXT" );
         if (!res) { Alert ( "OrderClose Error: " , GetLastError ());}
         else ticket = 0 ;
      }
   
       else if (sig == OP_SELL && type == OP_BUY)
      {
         SemaphoreTake( "TRADECONTEXT" ); 
         res = OrderClose(ticket, OrderLots(), Bid, slip);
         SemaphoreReturn( "TRADECONTEXT" );
         if (!res) { Alert ( "OrderClose Error: " , GetLastError ());}
         else ticket = 0 ;
      } 
   }   
   
   
   if (ticket == 0 )
   {   
       double _lot = lots;
   
       if (sig == OP_BUY)
      {
         SemaphoreTake( "TRADECONTEXT" ); 
         ticket = OrderSend ( Symbol (), OP_BUY, _lot, Ask, slip, Bid - StopLoss* Point , Bid + TakeProfit* Point , NULL , Magic);
         SemaphoreReturn( "TRADECONTEXT" );
         if (ticket < 0 ) { Alert ( "OrderSend Error: " , GetLastError ());}
      }
   
       else if (sig == OP_SELL)
      {
         SemaphoreTake( "TRADECONTEXT" );
         ticket = OrderSend ( Symbol (), OP_SELL, _lot, Bid, slip, Ask + StopLoss* Point , Ask - TakeProfit* Point , NULL , Magic);
         SemaphoreReturn( "TRADECONTEXT" );
         if (ticket < 0 ) { Alert ( "OrderSend Error: " , GetLastError ());}
      }
   }
}

int RefreshTicket( int ticket)
{
   bool res;
   
   if (ticket <= 0 )
       return ( 0 );
   else
   {
      res = OrderSelect (ticket, SELECT_BY_TICKET);
       if (!res)
         return ( 0 );
       else if (OrderCloseTime() != 0 )
         return ( 0 );
   }
   
   return (ticket);       //all ok, ticket still valid
}

int GetSignal_GANN()
{
   //Alert("!!: ", s1, ";", UseBeginDate, ";", BeginDate, ";", nBarsBack, ";", prices, ";", Price_Mode, ";", Show_GridMatrix, ";", Show_GannGrid, ";", Show_HiloArrows, ";", Show_PriceArrows, ";", Show_Comments, ";", ____MainGrid____, ";", MainGrid_Color, ";", MainGrid_Style, ";", MinMaxGrid_Style, ";", MainGrid_Width, ";", fontSize, ";", Draw_AllGrids, ";", Draw_AdditionalGrids, ";", ____GannGrid____, ";", GannGrid_Color, ";", GannGrid_Style, ";", GannGrid_Width, ";", ____Default_GridParameters____, ";", MainGrid_Intervals, ";", GannGrid_Interval, ";", Text_Shift);

   double ga_up = iCustom ( NULL , 0 , "Gann v2.0" , s1, UseBeginDate, BeginDate, nBarsBack, prices, Price_Mode, Show_GridMatrix, Show_GannGrid, Show_HiloArrows, Show_PriceArrows, Show_Comments, ____MainGrid____, MainGrid_Color, MainGrid_Style, MinMaxGrid_Style, MainGrid_Width, fontSize, Draw_AllGrids, Draw_AdditionalGrids, ____GannGrid____, GannGrid_Color, GannGrid_Style, GannGrid_Width, ____Default_GridParameters____, MainGrid_Intervals, GannGrid_Interval, Text_Shift, 
                                           4 , 0 );
  
   double ga_dn = iCustom ( NULL , 0 , "Gann v2.0" , s1, UseBeginDate, BeginDate, nBarsBack, prices, Price_Mode, Show_GridMatrix, Show_GannGrid, Show_HiloArrows, Show_PriceArrows, Show_Comments, ____MainGrid____, MainGrid_Color, MainGrid_Style, MinMaxGrid_Style, MainGrid_Width, fontSize, Draw_AllGrids, Draw_AdditionalGrids, ____GannGrid____, GannGrid_Color, GannGrid_Style, GannGrid_Width, ____Default_GridParameters____, MainGrid_Intervals, GannGrid_Interval, Text_Shift, 
                                           6 , 0 ); 

   Print ( "ga_up = " , ga_up);
   Print ( "ga_dn = " , ga_dn);
   
   if (ga_up > 0.0 )
       return (OP_BUY);
   else if (ga_dn > 0.0 )
       return (OP_SELL);
   else
       return (- 1 );   
}


int TrailAllOrders()
{
   int i, total;
   
   total = CreateTicketArray(OP_BUY, Magic);
   for (i= 0 ; i<total; i++)
      TrailingStop(Ticket[i]);

   total = CreateTicketArray(OP_SELL, Magic);
   for (i= 0 ; i<total; i++)
      TrailingStop(Ticket[i]);
}

void TrailingStop( int ticket)
{
   int res;
   OrderSelect (ticket, SELECT_BY_TICKET);
   
   if (OrderType() == OP_BUY)
       if (TrailWhileMinus == true || Bid-OrderOpenPrice()> Point *Trail)         //не тралим, пока не можем достичь безубытка первым переносом стопа   
         if (Bid - OrderStopLoss() > Trail* Point )
         {
            SemaphoreTake( "TRADECONTEXT" );
            res = OrderModify(OrderTicket(), 0 , Bid - Trail* Point , OrderTakeProfit(), 0 );
            SemaphoreReturn( "TRADECONTEXT" ); 
             if (res< 0 )
               Alert ( "TrailingStop OrderModify Error: " , GetLastError ());
        }
         
   if (OrderType() == OP_SELL)
       if (TrailWhileMinus == true || OrderOpenPrice()-Ask> Point *Trail)         //не тралим, пока не можем достичь безубытка первым переносом стопа
         if (OrderStopLoss() - Ask > Trail* Point )
         {
            SemaphoreTake( "TRADECONTEXT" );
            res = OrderModify(OrderTicket(), 0 , Ask + Trail* Point , OrderTakeProfit(), 0 );
            SemaphoreReturn( "TRADECONTEXT" );        
             if (res< 0 )
               Alert ( "TrailingStop OrderModify Error: " , GetLastError ());
         }
}

int CreateTicketArray( int dir, int SysID)
{
   int total= OrdersTotal (), i, c= 0 ; if (total<= 0 ) return ( 0 );
         for (i= 0 ;i<total;i++) { OrderSelect (i, SELECT_BY_POS); if ((OrderType()==dir) && (OrderMagicNumber()==SysID)) { Ticket[c] = OrderTicket(); c++; } }
         return (c);
}

//------------------------------------------SEMAPHORE------------------------------------------

int critical = 0 ; 

void SemaphoreTake( string SEM)
{ 
   if ( GlobalVariableCheck (SEM) == false )
       GlobalVariableSet (SEM, 0 );
  
   while ( 1 == 1 )
   {
       if ( GlobalVariableSetOnCondition (SEM, 1.0 , 0.0 ))         //получили доступ
      {
         critical = 1 ;
         Print ( "SEMAPHORE \"" , SEM, "\" TAKEN. CURRENT VALUE: " , GlobalVariableGet (SEM));
         break ;       //выходим из цикла ожидания доступа
      }
       else
      {
         Print ( "ATTEMPT TO CAPTURE SEMAPHORE \"" , SEM, "\" FAILED. SEMAPHORE BUSY. WAITING 0.1 SEC. CURRENT VALUE: " , GlobalVariableGet (SEM));
         Sleep ( 100 );
      }
   }
} 

void SemaphoreReturn( string SEM)
{
   GlobalVariableSet (SEM, 0.0 );
   Print ( "SEMAPHORE \"" , SEM, "\" RETURNED. CURRENT VALUE: " , GlobalVariableGet (SEM));
   critical = 0 ;
}

void SemaphoreDeinit( string SEM)     //Вставить в ф-ю  deinit()
{
   if (critical == 1 )
   {
       GlobalVariableSet (SEM,       0.0 );     //на случай, если советника убивают, пока он в процессе посылки запроса
   }  
}
 
chief2000 :
İşte size yardımcı olacak komutun dokümantasyonundan bir örnek - nasıl çalıştığını anlayın, parametreleri değiştirin:

Yüksek[iEn Yüksek(NULL,0,MODE_HIGH,20,4)];
Düşük[iDüşük(NULL,0,MODE_LOW,10,10)];


TEŞEKKÜR EDERİM
 
chief2000 :
İşte size yardımcı olacak komutun dokümantasyonundan bir örnek - nasıl çalıştığını anlayın, parametreleri değiştirin:

Yüksek[iEn Yüksek(NULL,0,MODE_HIGH,20,4)];
Düşük[iDüşük(NULL,0,MODE_LOW,10,10)];


Geç cevap verdiğim için özür dilerim, bilgisayarımla ilgili sorunlar yaşadım.
 
chief2000 :
İşte size yardımcı olacak komutun dokümantasyonundan bir örnek - nasıl çalıştığını anlayın, parametreleri değiştirin:

Yüksek[iEn Yüksek(NULL,0,MODE_HIGH,20,4)];
Düşük[iDüşük(NULL,0,MODE_LOW,10,10)];


Geç cevap verdiğim için özür dilerim, bilgisayarımla ilgili sorunlar yaşadım.
 
al7bar :

Lütfen danışmanın koduna bakın, sebebinin ne olduğunu anlayamıyorum .... İlk başlangıçta, hemen bir ticaret açabilir, ancak kapattıktan sonra çalışmayı durdurur, terminalin bir sonraki yeniden başlatılmasına kadar veya açık / kapalı, danışmanın ticaret yapmasına izin verin ... Gann 2.0 göstergesi üzerinde çalışır

Mantıkta bariz bir hata yok. Kodu adım adım yazdırın. Ticaret prosedürü, bilet değişkeninin değerine bağlıdır. Her şeyden önce, değişikliklerini izleyin. Ayrıca "TRADECONTEXT" global terminal değişkeninin değerine de dikkat edin - değeri 0'a eşit olmalıdır.
 
TarasBY :

Bu fonksiyon, bir enstrüman hakkında (örneğin bir emire atıfta bulunmadan, örneğin bir emir açmadan önce) ve aynısı, ancak belirli bir emirle bağlantılı olarak (bunun yanındayken) alım satım bilgilerini almanızı sağlar. Varsayılan değer, işlevin kullanım kolaylığı için kullanılır. Alım satım işlemleri kitaplığı başlatılırken negatif bir fi_Ticket değeri kullanılır.

PS Ve başlamak için, değişkenlerin adına veya daha doğrusu öneklerine dikkat edin. bs_Symbol gibi b ile başlayan değişkenler kitaplıktan genel düzeyde bildirilir. Çoğu global değişken, b-PSI@Base içinde bildirilir.


Igor , anladım. Ama sonuç olarak, anladığım kadarıyla, belirli bir enstrüman için piyasa bilgisi almak için onu bir siparişe bağlamanız gerekmiyor. Bir enstrüman varsa, o zaman burada siparişe artık gerek yok ... Hiç gerekli değil. Sonuçta, piyasa bilgisi almak için sadece enstrümanın adına ihtiyacınız var... Katılmıyor musunuz?

Yukarıda sorduğum değişken bs_Symbol ilk olarak b-PSY@Base.mqh'nin eklenmesinde bahsediliyor.İşte şu satır:

  bs_Symbol,                             // текущий инструмент

Ama hiçbir şey alamadı. Sonra:

 if (fs_Symbol != bs_Symbol || fi_Ticket < 0 )

İşte ifade:

fs_Symbol != bs_Symbol

Şu şekilde anlaşılmalıdır: fs_Symbol != 0 değil mi?

TarasBY :

PS Ve başlamak için, değişkenlerin adına veya daha doğrusu öneklerine dikkat edin. bs_Symbol gibi b ile başlayan değişkenler kitaplıktan genel düzeyde bildirilir. Çoğu global değişken, b-PSI@Base içinde bildirilir.


hm. Genelde global değişkenleri g_ ( global kelimesinden) aracılığıyla belirlerim Ve l (örneğin, li_cnt ) aracılığıyla yerel değişkenleri mi kastediyorsunuz?
 

Arkadaşlar! Danışmanı sonuçlandırmak için yardıma ihtiyacınız var.

Belirli bir if koşulu altında bir sipariş açan bir program kodu vardır. Koşul, int start() gövdesine yerleştirildiği için her onayda yürütülebilir.

İhtiyaç:

1. Koşul yerine getirildikten (ve bir sipariş açtıktan) sonra, yeni siparişler açmak için duraklayın, n çubuk duraklatın. Örneğin, danışman M30 zaman dilimindeyse ve 3 saat atlamam gerekiyorsa, duraklama 6 bar olmalıdır.

2. Program, strateji test cihazında çalışmalıdır.

Hangi kod gerekli. Ve onu koymak için en iyi yer neresi olurdu?

 int start()
  { 
   ...

   if (...)                                                           //условие
      {
       OrderSend ( Symbol (),OP_BUY,lot,Ask, 0 , 0 , 0 , "Order BUY" , 0 , 0 );     //открытие ордера
       ...
      }

   ...
  }
 
hoz :


Igor , anladım. Ama sonuç olarak, anladığım kadarıyla, belirli bir enstrüman için piyasa bilgisi almak için onu bir siparişe bağlamanız gerekmiyor. Bir enstrüman varsa, o zaman burada siparişe artık gerek yok ... Hiç gerekli değil. Sonuçta, piyasa bilgisi almak için sadece enstrümanın adına ihtiyacınız var... Katılmıyor musunuz?

Yukarıda sorduğum değişken bs_Symbol ilk olarak b-PSY@Base.mqh'nin eklenmesinde bahsediliyor.İşte şu satır:

Ama hiçbir şey alamadı. Sonra:

İşte ifade:

Şu şekilde anlaşılmalıdır: fs_Symbol != 0 değil mi?


hm. Genelde global değişkenleri g_ ( global kelimesinden) aracılığıyla belirlerim Ve l (örneğin, li_cnt ) aracılığıyla yerel değişkenleri mi kastediyorsunuz?

Hala öğrenecek çok şeyin var. Varsayımlarınız doğru olmasa da. İşlevlerim aynı anda farklı amaçlar gerçekleştirebilir (kodun kendisini azaltmak için), özellikle fGet_MarketInfo(). Her şey defalarca düşünüldü ve hiçbir şeyin değiştirilmesi gerekmiyor!

Ve örneğin bir deneyle başlayın: EA gövdesinde bir global değişken tanımlayın ve bu değişkeni bağlantılı kitaplıktan çağırmaya çalışın. Elde edilen sonuçları, ön eki b ile başlayan değişkenlerin adlarıyla ilişkilendirmeye çalışın, örneğin, bs_Symbol.

Not: Kontrol edilmeme gerek yok: Kütüphanelerimi kullanırsın ya da kullanmazsın. Bir şey (kütüphanelerimden bazıları) düzgün çalışmıyorsa, bana bildirin, düzelteyim. Ve sorular sormak için - "Neden böyle çalışıyor?" - daha fazla bilgiye ihtiyacınız var, çünkü "kanıt yüzeyde yatmaz."

 
TarasBY :

Hala öğrenecek çok şeyin var. Varsayımlarınız doğru olmasa da. İşlevlerim aynı anda farklı amaçlar gerçekleştirebilir (kodun kendisini azaltmak için), özellikle fGet_MarketInfo(). Her şey defalarca düşünüldü ve hiçbir şeyin değiştirilmesi gerekmiyor!

Orada ne olduğunu anlıyorum. Ama neden böyle yapıldığı belli değil.

TarasBY :

Ve örneğin bir deneyle başlayın: EA gövdesinde bir global değişken tanımlayın ve bu değişkeni bağlantılı kitaplıktan çağırmaya çalışın. Elde edilen sonuçları, ön eki b ile başlayan değişkenlerin adlarıyla ilişkilendirmeye çalışın, örneğin, bs_Symbol.

Orijinal haliyle yine de kitaplıklarınızı kullanamayacaksınız; her şey bağlı. Her özellik diğerlerinin bir paketinde..

TarasBY :

Not: Kontrol edilmeme gerek yok: Kütüphanelerimi kullanırsın ya da kullanmazsın. Bir şey (kütüphanelerimden bazıları) düzgün çalışmıyorsa, bana bildirin, düzelteyim. Ve sorular sormak için - "Neden böyle çalışıyor?" - daha fazla bilgiye ihtiyacınız var, çünkü "kanıt yüzeyde yatmaz."

Hiçbir durumda kontrol etmek istemedim .. Ayrıca, her şeyin çok yetkin bir şekilde yazıldığına şüphe yok. Sadece her şeyi tam olarak anlamıyorum, bu yüzden tam olarak doğru olmadığını düşündüğümü söyledim .. Bakıyorum, sanırım .. AMA her şeyi anlamıyorum. İşte bunu sordu.

PS bs_Symbol ile anlamadım.

Neden: