Hatalar, hatalar, sorular - sayfa 1141

 

Herkese selam!

Böyle bir sorun.

Bantların ve MA göstergelerinin değerini başarıyla alıyorum.

Bands_handle=iBands(NULL,0,BP_var_s,0,BDev_var_s, PRICE_CLOSE );
CopyBuffer(Bands_handle,0,0,1,Base);
CopyBuffer(Bands_handle,1,0,1,Üst);
CopyBuffer(Bands_handle,2,0,1,Alt);
B_med_s=Temel[0];
B_up_s=Üst[0];
B_low_s=Alt[0];

MA_handle=iMA(NULL,0,MA_var_b,0,MODE_SMA,PRICE_TYPICAL);
CopyBuffer(MA_handle,0,0,1,MAv);
M_av_s=MAv[0];

Sonra yazdırırım: B_up_s=1.264249475876921 M_av_s=1.2595

Sonra, mat yapmaya çalışıyorum. işlemi B_up_s-M_av_s ve sonuç olarak 0.00000000 olsun.

Hangi mucizeler???

 
Alvin1976 :

Herkese selam!

Böyle bir sorun.

Bantların ve MA göstergelerinin değerini başarıyla alıyorum.

Bands_handle=iBands(NULL,0,BP_var_s,0,BDev_var_s, PRICE_CLOSE );
   CopyBuffer(Bands_handle,0,0,1,Base);
   CopyBuffer(Bands_handle,1,0,1,Upper);
   CopyBuffer(Bands_handle,2,0,1,Lower);
   B_med_s=Base[0];
   B_up_s=Upper[0];
   B_low_s=Lower[0];
   
   MA_handle=iMA(NULL,0,MA_var_b,0,MODE_SMA,PRICE_TYPICAL);
   CopyBuffer(MA_handle,0,0,1,MAv);
   M_av_s=MAv[0];  

Sonra yazdırırım: B_up_s=1.264249475876921 M_av_s=1.2595

Sonra, mat yapmaya çalışıyorum. işlemi B_up_s-M_av_s ve sonuç olarak 0.00000000 olsun.

Hangi mucizeler???

1) Kod nasıl gömülür ?

2) İşlemin sonucunu ne tür bir değişkende saklıyorsunuz? Ve çıktının üretildiği kodun bir kısmını vermek daha iyidir.

 
MigVRN :

1) Kod nasıl gömülür ?

2) İşlemin sonucunu ne tür bir değişkende saklıyorsunuz? Ve çıktının üretildiği kodun bir kısmını vermek daha iyidir.

Double türündeki tüm değişkenler.

Bantların neden birçok işareti olduğu ve MA'nın ondalık noktadan sonra sadece 4'ü olduğu açık değil. Ve sonuç hiç sıfır olmamalıdır. Bu nedenle, algoritma çalışmıyor.

MQL4'te her şey ne kadar basitti. Ve şimdi optimizasyon hızına ve çoklu para birimi kontrolüne ihtiyacımız var. Bunu elde etmek için her şeyi MQL5'e aktarmam gerekiyor ))

 double q=B_up_s-M_av_s;
 Print( B_up_s-M_av_s=", DoubleToString(q));
 
Alvin1976 :

Double türündeki tüm değişkenler.

Bantların neden birçok işareti olduğu ve MA'nın ondalık noktadan sonra sadece 4'ü olduğu açık değil. Ve sonuç hiç sıfır olmamalıdır. Bu nedenle, algoritma çalışmıyor.

MQL4'te her şey ne kadar basitti. Ve şimdi optimizasyon hızına ve çoklu para birimi kontrolüne ihtiyacımız var. Bunu elde etmek için her şeyi MQL5'e aktarmam gerekiyor ))

Çalışmalı. Kodunuza ve sonucuna göre komut dosyası aşağıdadır:

 void OnStart ()
  {
  
   double Base[ 1 ];
   double Upper[ 1 ];
   double Lower[ 1 ];  
  
   int BP_var_s = 20 ;
   int BDev_var_s = 30 ;
   int MA_var_b = 10 ;
  
   double M_av_s = 0 ;
   double MAv[ 1 ];
  
   double B_med_s, B_up_s, B_low_s;
  
  
   //---Далее Ваш код
   int Bands_handle= iBands ( NULL , 0 ,BP_var_s, 0 ,BDev_var_s, PRICE_CLOSE );
   CopyBuffer (Bands_handle, 0 , 0 , 1 ,Base);
   CopyBuffer (Bands_handle, 1 , 0 , 1 ,Upper);
   CopyBuffer (Bands_handle, 2 , 0 , 1 ,Lower);
   
   B_med_s=Base[ 0 ];
   B_up_s=Upper[ 0 ];
   B_low_s=Lower[ 0 ];
   
   int MA_handle= iMA ( NULL , 0 ,MA_var_b, 0 , MODE_SMA , PRICE_TYPICAL );
   
   CopyBuffer (MA_handle, 0 , 0 , 1 ,MAv);
   M_av_s=MAv[ 0 ]; 
   
     double q = B_up_s - M_av_s;
    
     Print ( "B_up_s-M_av_s=" , DoubleToString (q));
   
  }

 
Alvin1976 :

Double türündeki tüm değişkenler.

Bantların neden birçok işareti olduğu ve MA'nın ondalık noktadan sonra sadece 4'ü olduğu açık değil. Ve sonuç hiç sıfır olmamalıdır. Bu nedenle, algoritma çalışmıyor.

MQL4'te her şey ne kadar basitti. Ve şimdi optimizasyon hızına ve çoklu para birimi kontrolüne ihtiyacımız var. Bunu elde etmek için her şeyi MQL5'e aktarmam gerekiyor ))

"Çıkarma" işleminden önce, arabelleklerinizde ne olduğunu bulmak için değişkenlerin değerini yazdırın :
 Print ( "B_up_s= " ,B_up_s, "; M_av_s=" ,M_av_s);
double q=B_up_s-M_av_s;
 
MigVRN :

Çalışmalı. Kodunuza ve sonucuna göre komut dosyası aşağıdadır:

Evet script çalışıyor.

Uzman Danışman bile bu örnekle çalışır.

Ama danışmanım inatla sıfır veriyor. Hatayı arayalım...

 

Merhaba!

Soru, bir dakika içinde her tikte güncellenen bir değişkenin değerlerinin nasıl toplanacağı ve daha sonra bu toplamın ayrı bir değere yazılması, bir sonraki dakikanın kapanmasından sonra toplamın değeri ile değiştirilmesidir. yeni bir?

int t = ZamanSaniye();

süre (t !=0)

double b, her tıklamada bir dakika içinde güncellenen bir değişkendir.

double b1 - önceki onay işaretindeki b değişkeninin değeri.

double s - bir dakika içindeki tüm kenelerin toplamı.

double s1 - son dakikadaki tüm tiklerin toplamı.

b1=b;

s=b1+b;

eğer (t=0) s1=s;

Her tikte veri nasıl toplanır ve genel olarak nasıl yazılır?

 
Alvin1976 :

Evet script çalışıyor.

Uzman Danışman bile bu örnekle çalışır.

Ama danışmanım inatla sıfır veriyor. Hatayı arayalım...

İşte bulunanlar.

Danışmanı çalıştırırsanız, iyi çalışır, ancak test cihazında en başta sıfır verir. Ve zaten bir sonraki satır yürütüldüğünde, sıfırlar sihirli bir şekilde normal gösterge verileri haline gelir. neyin var anlamadım.....

Kod aşağıdadır.

İşte testçinin söylediği

CJ 0 19:40:47.022 Çekirdek 1 EURUSD,M15 (Alpari-Ltd-Demo): OHLC çubuğu durumları üretiyor. Çubuk üzerinde yürütülen OnTick yalnızca başlar
IJ 0 19:40:47.022 Core 1 EURUSD,M15: Experts\tmp.ex5'in 2004.01.07 00:00 ile 2004.02.02 00:00 arasında testi başladı
LK 0 19:40:47.022 Çekirdek 1 2004.01.07 00:00:00 B_up_s=0.0 M_av_s=0.0
IM 0 19:40:47.022 Çekirdek 1 2004.01.07 00:00:00 sbl_top=true B_up_s=0.0 M_av_s=0.0 B_up_s-M_av_s=0.00000000
OQ 0 19:40:47.022 Çekirdek 1 2004.01.07 00:15:00 B_up_s=1.279208140152992 M_av_s=1.2718
OI 0 19:40:47.022 Çekirdek 1 2004.01.07 00:15:00 sel=true B_up_s=1.279208140152992 M_av_s=1.2718 B_up_s-M_av_s=0.00740814
CJ 0 19:40:47.022 Çekirdek 1 2004.01.07 00:30:00 B_up_s=1.279239651523307 M_av_s=1.2721
LN 0 19:40:47.022 Çekirdek 1 2004.01.07 00:45:00 B_up_s=1.279382808470771 M_av_s=1.2714
DS 0 19:40:47.022 Çekirdek 1 2004.01.07 01:00:00 B_up_s=1.279407737043184 M_av_s=1.2719
OD 0 19:40:47.022 Çekirdek 1 2004.01.07 01:15:00 B_up_s=1.279398917431485 M_av_s=1.2727
NI 0 19:40:47.022 Çekirdek 1 2004.01.07 01:30:00 B_up_s=1.279380702214008 M_av_s=1.2731
IM 0 19:40:47.022 Çekirdek 1 2004.01.07 01:45:00 B_up_s=1.279440208228416 M_av_s=1.2723
LE 0 19:40:47.022 Çekirdek 1 2004.01.07 02:00:00 B_up_s=1.279473515350084 M_av_s=1.722
DK 0 19:40:47.022 Çekirdek 1 2004.01.07 02:15:00 B_up_s=1.279515146590278 M_av_s=1.2715
FL 0 19:40:47.022 Çekirdek 1 2004.01.07 02:30:00 B_up_s=1.279601656250741 M_av_s=1.2709
IQ 0 19:40:47.022 Çekirdek 1 2004.01.07 02:45:00 B_up_s=1.279656914787522 M_av_s=1.2709
CE 0 19:40:47.022 Çekirdek 1 2004.01.07 03:00:00 B_up_s=1.27957926541548 M_av_s=1.2707

 //#property link      "http://www.mql5.com"
//#property version   "1.00"

//+------------------------------------------------------------------+

 double
   BDev_var_b= 2 ,       
   BDev_var_s= 2 ,       
   B_up_s= 0 , 
   B_low_s= 0 ,
   B_med_s= 0 ,
   M_av_s= 0 , 
   Base[ 1 ],
   Upper[ 1 ],
   Lower[ 1 ],
   MAv[ 1 ],   
   Dist_c= 0.0015 ,
   Dist_d= 0.002 ;
   
   bool 
    selord= false ,  
    baiord= false ,
    New_Bar= false , 
    sbl_top= false ,    
    sbl_bot= false , 
    bai= false ,  
    sel= false ;
   
   int
    Bands_handle,    
    MA_handle,   
    MA_var_s= 1 ,   
    BP_var_s= 50 ;  

    
//=============================================================================================================
int OnInit ()
  {

   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {


   Bands_handle= iBands ( NULL , 0 ,BP_var_s, 0 ,BDev_var_s, PRICE_CLOSE );
   CopyBuffer (Bands_handle, 0 , 0 , 1 ,Base);
   CopyBuffer (Bands_handle, 1 , 0 , 1 ,Upper);
   CopyBuffer (Bands_handle, 2 , 0 , 1 ,Lower);
   B_med_s=Base[ 0 ];
   B_up_s=Upper[ 0 ];
   B_low_s=Lower[ 0 ];
   
   MA_handle= iMA ( NULL , 0 ,MA_var_s, 0 , MODE_SMA , PRICE_TYPICAL );
   CopyBuffer (MA_handle, 0 , 0 , 1 ,MAv);
   M_av_s=MAv[ 0 ];
   
   
   Print ( " B_up_s=" ,B_up_s, "   M_av_s=" , M_av_s);  

   
   // установка флагов
   if (sbl_top== false && (B_up_s-M_av_s)<Dist_c) 
     {
       sbl_top= true ;
       Print ( "sbl_top=true   " , "  B_up_s=" ,B_up_s, "  M_av_s=" , M_av_s, "  B_up_s-M_av_s=" , DoubleToString (B_up_s-M_av_s));
     }
   if (sbl_top== true && (B_up_s-M_av_s)>Dist_d)
       {
       sbl_top= false ;
       Print ( "sel=true  " , "  B_up_s=" ,B_up_s, "  M_av_s=" , M_av_s, "  B_up_s-M_av_s=" , DoubleToString (B_up_s-M_av_s));
       }
    


     return ;                                   
   }


 
Alvin1976 :

İşte bulunanlar.

1) Her tikte gösterge oluşturmaya gerek yok!

2) Değerlerine başvurmadan önce göstergenin oluşturulup oluşturulmadığını kontrol etmek gerekir.

3) İstenilen değerlerin indikatörden kopyalanıp kopyalanmadığını kontrol etmek gerekir.

4) Uzman Danışman tamamlandıktan sonra her zaman göstergenin hesaplanan kısmını silin, aksi takdirde bir noktada yeterli operatör olmayabilir.

Söve, henüz oluşturulmamış bir göstergeden değerleri kopyalamaya çalışmanızdan kaynaklanıyordu. Çağrılan işlevlerin sonucunu kontrol etmeyi bir kural haline getirin.

Dosyalar:
 

Lütfen bana hatanın nerede olduğunu söyle.

Uzman demo, 3 çift üzerinde çalışır. İşte günlük:

PUSD,M15)       AUDUSD Request executed: delete buy Ticket: # 729600 Price = 0.94794 Lots = 0.1 StopLoss = 0 TakeProfit = 0 Comment = BuyTP( 4 )
LH       0        08 : 45 : 05.881     Serendipity5. 0 (GBPUSD,M15)     AUDUSD Request executed: delete buy Ticket: # 729598 Price = 0.94514 Lots = 0.42 StopLoss = 0 TakeProfit = 0 Comment = BuyTP( 4 )
KM       0        08 : 45 : 06.053     Serendipity5. 0 (GBPUSD,M15)     Error: AUDUSD Action: delete buy : Requested Volume: 0.42 , Requested StopLoss: 0 , Requested TakeProfit: 0 , Requested Price: 0.94514 Error: 10013
OE       0        08 : 45 : 06.053     Serendipity5. 0 (GBPUSD,M15)     Sleep () for 1 second, retry
LO       0        08 : 45 : 07.145     Serendipity5. 0 (GBPUSD,M15)     DeletePendings(): AUDUSD Error deleting pending order: Error Code: 4756
CQ       0        08 : 45 : 07.145     Serendipity5. 0 (GBPUSD,M15)     SendOrder(); OrderCheck () Error = 10013 Sleep () for 1 second, retry
GP       0        08 : 45 : 08.237     Serendipity5. 0 (GBPUSD,M15)     DeletePendings(): AUDUSD Error deleting pending order: Error Code: 4756
PL       0        08 : 45 : 08.237     Serendipity5. 0 (GBPUSD,M15)     SendOrder(); OrderCheck () Error = 10013 Sleep () for 1 second, retry

İşte kod

 bool SendTradeRequest( string symb, ENUM_ORDER_TYPE type, ENUM_TRADE_REQUEST_ACTIONS tradeAction, double price, 
   double lot, double stopLoss, double takeProfit, long const magic, string comment, ulong ticket){
//--- prepare a request
   MqlTradeRequest request={ 0 };
   //ZeroMemory(request);
   
   request.action=tradeAction;        
   request.magic=magic;              
   request.symbol=symb;                 
   request.volume=lot;                         
   request.sl=stopLoss;                             
   request.tp=takeProfit;                                 
   request.type=type;              
   request.price=price;
   request.comment=comment;
   if (tradeAction== TRADE_ACTION_MODIFY || tradeAction== TRADE_ACTION_REMOVE )request.order=ticket;
      
//--- send a trade request
   MqlTradeResult result={ 0 };
   MqlTradeCheckResult checkresult={ 0 };
   //ZeroMemory(result);
   //ZeroMemory(checkresult);
   bool isSuccessful;
   isSuccessful= OrderCheck (request,checkresult);
   if (checkresult.retcode!= 0 && checkresult.retcode!= 10009 && checkresult.retcode!= 10008 ){
       Print ( "SendOrder(); OrderCheck() Error = " ,checkresult.retcode, " Sleep() for 1 second, retry" ); 
       Sleep ( 1000 ); return ( 0 );                                      
      }       
      
   isSuccessful= OrderSend (request,result);        
   if ( (result.retcode == 10009 || result.retcode == 10008 || result.retcode == 0 ) ){
       //--- write the server reply to log  
       //Print(__FUNCTION__,":",result.comment);
       Print (symb, " " +result.comment+ ": " +ConvertTradeActionToString(request.action)+ " " ,( string )ConvertOrderTypeToString(request.type), " Ticket: #" ,( string )result.order, " Price = " ,( string )request.price, " Lots = " ,( string )request.volume,
         " stopLoss = " ,( string )request.sl, " takeProfit = " ,( string )request.tp, " Comment = " ,( string )request.comment);
      
       if (tradeAction== TRADE_ACTION_PENDING )   
         arrow_cntr=CreateSignalArrow( "Open " +( string )ConvertOrderTypeToString(request.type)+ " " +request.comment+ " Ticket " +( string )result.order+
             " Lots " + DoubleToString (request.volume, 2 )+ " Time " + TimeToString ( TimeCurrent (), TIME_MINUTES ),arrow_cntr,request.price, 216 , clrDarkViolet ,symb);
      
       if (tradeAction== TRADE_ACTION_MODIFY )   
         arrow_cntr=CreateSignalArrow( "OrderModify " +request.comment+ " Ticket " +( string )request.order+ " Lots " + DoubleToString (request.volume, 2 )+
             " Time " + TimeToString ( TimeCurrent (), TIME_MINUTES ),arrow_cntr,request.price, 251 , clrSilver ,symb); 
      
       if (tradeAction== TRADE_ACTION_REMOVE )
         arrow_cntr=CreateSignalArrow( "OrderDelete " +request.comment+ " Ticket " +( string )request.order+ " Lots " + DoubleToString (request.volume, 2 )+
             " Time " + TimeToString ( TimeCurrent (), TIME_MINUTES ),arrow_cntr,Close( 1 ,symb), 158 ,Red,symb);      
      
      CheckErrorMessage( "SendTradeRequest():" );
       return ( 1 );  
      }  

EA, OrderDelete()'i çalıştırmayı dener, bir hata verir, SendTradeRequest() while döngüsündedir, EA buna göre döngü yapar. Başvuruyu gönderirken fiyat değişmiş olabilir mi? RefreshRates() gerekli mi ve onunla nasıl doğru çalışılır, forumda aradım ama hiçbir yerde bir örnek bulamadım ..

herkese şimdiden teşekkürler

Neden: