Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 732

 
Fox_RM :

Herkese merhaba!

Lütfen bana Expert Advisor'da değerleri iCustom üzerinden geçirme sorununun ne olduğunu söyleyin.

2014.10.12 10:23:06.656 TestGenerator: eşleşmeyen veri hatası (2014.03.14 21:45'te 470 hacim sınırı aşıldı)

2014.10.12 10:23:53.468 2014.03.06 18:15 KümeExp2 GBPUSD,M15: 2147483647 2147483647

Bir ataş üzerinde Correl8 göstergesi.

Şimdiden teşekkür ederim!

Test edilen sembolün geçmişini yükleyin. iCustom()'da değil, geçmiş verilerde hata
 
artmedia70 :
Test edilen sembolün geçmişini yükleyin. iCustom()'da değil, geçmiş verilerde hata
Teşekkürler!!!
 
borilunad :
Günaydın Artyom! Evet, sihirbazlar hakkında net! Ancak bir döngüde olmayan bir şey olduğunda, ancak if-else gibi durumlarda, daha önce mySymbol= Symbol sunmuş olmak için sadece ilk koşulu if(Symbol()==mySymbol)(elbette, başkası olmadan) koymak yeterli olacaktır. ()?! Böylece tüm uzmanların tüm değişkenleri aynı, ancak her biri kendi çizelgesinde! Henüz kontrol edemiyorum, hala yazıyorum, “şantaj”! :)
string mySymbol=Symbol(); ise, bu değişken geçerli sembolün değerini içerecektir. Buna göre, kendi grafiğinde işlem gören her Expert Advisor için bu değişkenin değeri, Expert Advisor'ın başlatıldığı sembolün değerine eşit olacaktır.
 
artmedia70 :
string mySymbol=Symbol(); ise, bu değişken geçerli sembolün değerini içerecektir. Buna göre, kendi grafiğinde işlem gören her Expert Advisor için bu değişkenin değeri, Expert Advisor'ın başlatıldığı sembolün değerine eşit olacaktır.
Her nasılsa string'e hakkında düşünmedim! Diğer Uzman Danışmanlarda iyi çalışan kanıtlanmış işlevlerden kaynaklanan hatalarla uğraşırken! Çok teşekkürler!
 

Dosyaya yazdırmak. Bu dosyaya yazmayı öğreniyorum.

Neden cl_time'da sıfır yazdırıyor?

1.37243 1.37253 -1 07:27:13 00:00:00
1.37248 1.37256 -1 07:57:21 00:00:00
1.37256 1.37256 -1 08:17:30 00:00:00
1.37266 1.37268 -1 08:48:11 00:00:00
1.37267 1.37293 -1 08:53:15 00:00:00
1.37269 1.37307 1 09:17:57 00:00:00
1.37275 1.3727 1 10:23:02 00:00:00
1.37269 1.37269 1 10:28:03 00:00:00
1.37268 1.37231 1 10:33:10 00:00:00
1.37278 1.37255 1 10:57:38 00:00:00
1.37256 1.37269 -1 11:02:42 00:00:00
1.37268 1.37284 1 11:07:45 00:00:00
1.37283 1.37307 -1 11:12:49 00:00:00
1.37314 1.37335 1 12:11:37 00:00:00
1.37317 1.37323 1 12:23:12 00:00:00
1.37324 1.37326 1 12:28:20 00:00:00
1.37396 1.37415 1 13:26:32 00:00:00
1.37413 1.37419 1 13:37:20 00:00:00
1.3744 1.37578 1 13:56:29 00:00:00

 //+------------------------------------------------------------------+
//|                                                    cci on ma.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+

#property copyright    "2005-2014, MetaQuotes Software Corp."
#property link          "https://www.mql4.com"
#property strict

input double Lots                   = 0.1 ;

input int Expiration           = 5 ; //laikas minutemis

//---- input parameters
input int cci_p                     = 89 ;
input int ma                        = 13 ;
input int NumberOfBarsToCalculate   = 100 ;

input string    comment= ".csv  or  .txt" ; //коментарий
input string    FileType= "csv" ; //тип файла 

datetime op_time= 0 ,cl_time= 0 ;
double   op_price= 0 ,cl_price= 0 ;
int op_type= 0 ;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick ( void )
  {
   
   int     cnt,ticket,total;

   

//---
   if ( Bars <cci_p+ 1 )
     {
       Print ( "bars less than " ,cci_p);
       return ;
     }

//--- to simplify the coding and speed up access data are put into internal variables
   double cci_dn= iCustom ( NULL , 0 , "cci_ma" ,cci_p,ma,NumberOfBarsToCalculate, 2 , 0 );
   double cci_up= iCustom ( NULL , 0 , "cci_ma" ,cci_p,ma,NumberOfBarsToCalculate, 3 , 0 );
   

   total= OrdersTotal ();
   if (total< 1 )
     {
       //--- check for long position (BUY) possibility
       if (cci_up> 0 && cci_up!= EMPTY_VALUE )
        {
         ticket= OrderSend ( Symbol (),OP_BUY,Lots,Ask, 3 , 0 , 0 , "cci sample" , 16384 , 0 ,Green);
         if (ticket> 0 )
           {
             if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES))
               
               op_time= TimeLocal ();
               op_price=Close[ 0 ];
               op_type= 1 ;
               Print ( "BUY order opened : " ,OrderOpenPrice());
               Print ( "op_price : " ,op_price, "op_time : " ,op_time);
           }
         else
             Print ( "Error opening BUY order : " , GetLastError ());
         return ;
        }
       //--- check for short position (SELL) possibility
       if (cci_dn< 0 && cci_dn!= EMPTY_VALUE )
        {
         ticket= OrderSend ( Symbol (),OP_SELL,Lots,Bid, 3 , 0 , 0 , "cci sample" , 16384 , 0 ,Red);
         if (ticket> 0 )
           {
             if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES))
               
               op_time= TimeLocal ();
               op_price=Close[ 0 ];
               op_type=- 1 ;
               Print ( "BUY order opened : " ,OrderOpenPrice());
               Print ( "op_price : " ,op_price, "op_time : " ,op_time);
           }
         else
             Print ( "Error opening SELL order : " , GetLastError ());
        }
       //--- exit from the "no opened orders" block
       return ;
     }
//--- it is important to enter the market correctly, but it is more important to exit it correctly...   
   for (cnt= 0 ;cnt<total;cnt++)
     {
       if (! OrderSelect (cnt,SELECT_BY_POS,MODE_TRADES))
         continue ;
       if (OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()== Symbol ())   // check for symbol
        {
         //--- long position is opened
         if (OrderType()==OP_BUY)
           {
             //--- should it be closed?
             if ( TimeCurrent ()>=op_time+Expiration* 60 )
              {
               //--- close order and exit
               if (!OrderClose(OrderTicket(),OrderLots(),Bid, 3 ,Violet))
               
               cl_time= TimeCurrent (); //op_time+Expiration*60;
               cl_price=Close[ 0 ];               
               
               Print ( "OrderClose error " , GetLastError ());               
               
              PrintToFile(op_price, cl_price, op_type, op_time, cl_time);
      
               return ;
              }  
           }
         else // go to short position
           {
             //--- should it be closed?
             if ( TimeCurrent ()>=op_time+Expiration* 60 )
              {
               //--- close order and exit
               if (!OrderClose(OrderTicket(),OrderLots(),Ask, 3 ,Violet))
               cl_time= TimeCurrent (); //op_time+Expiration*60;
               cl_price=Close[ 0 ];              
               
               Print ( "OrderClose error " , GetLastError ());               
               
               PrintToFile(op_price, cl_price, op_type, op_time, cl_time);
                  
               return ;
              }         
           }
        }
     }
//---
  }
//+------------------------------------------------------------------+
void PrintToFile( double opPrice= 0 , double clPrice= 0 , int opType= 0 , datetime opTime= 0 , datetime clTime= 0 )
{
   string fileName= StringConcatenate ( Symbol (), " " , Period (), " " , "gi_EA_cci" );
   
   int handle;
   handle= FileOpen (fileName+FileType, FILE_WRITE | FILE_READ , ";" );
               if (handle!= INVALID_HANDLE )
               {
                   PrintFormat ( "Файл %s открыт для записи" ,fileName);
                   PrintFormat ( "Путь к файлу: %s\\Files\\" , TerminalInfoString ( TERMINAL_DATA_PATH ));
                   //--- сначала запишем количество сигналов
                   FileSeek (handle, 0 , SEEK_END );
                   FileWrite (handle,
                           opPrice,
                           clPrice,
                           opType,                           
                           TimeToString (opTime, TIME_MINUTES | TIME_SECONDS ), 
                           TimeToString (clTime, TIME_MINUTES | TIME_SECONDS ));
      
      
                   //--- закрываем файл
                   FileClose (handle);
                   PrintFormat ( "Данные записаны, файл %s закрыт" ,fileName);
               }
               else
               PrintFormat ( "Не удалось открыть файл %s, Код ошибки = %d" ,fileName, GetLastError ());
}
 
Bana baykuştaki hesaptan para çekilmesini nasıl belirleyeceğimi söyle?
 
beginner :
Bana baykuştaki hesaptan para çekilmesini nasıl belirleyeceğimi söyle?

Bazı "siparişler" için OrderType() sayısal olarak 6'ya eşit bir değer verir. Bunlar para çekme ve para yatırma işlemleridir.

OrderSelect()'e başarılı bir çağrıdan sonra (true döndü), OrderProfit()'ten döndürülen değere ve bu değerin işaretine göre para çekme/yenileme miktarını belirleyebilirsiniz.

Ayrıca, bazı brokerler, komisyon tutarı için hesaptan bir para çekilmesini simüle ederek bir komisyon talep eder. OrderComment()'i kullanarak, komisyon ücretini hesaptan çekilmeden yorumla ayırmayı deneyebilirsiniz.

Ancak dikkatli olmalısınız: bunların hepsi belgelenmemiş, her an çalışmayı durdurabilir.

 
simpleton :


Sayesinde!
 
Sevgili programcılar! Bir Uzman Danışmanı optimize ederken, ben şahsen, diğer birçok katılımcı gibi, bana göre en önemli gösterge olan maksimum kârın maksimum düşüşe oranını (oran: kâr / düşüş) bulmaya çalışıyorum. Test cihazı çalıştırması tamamlandıktan sonra bu prosedürü manuel olarak yapıyorum. Bu süreci otomatikleştirmek mümkün mü? Veya her biriniz bu parametreyi nasıl tanımlıyorsunuz? Şimdiden teşekkürler.
 
yosuf :
Sevgili programcılar! Bir EA'yı optimize ederken, kişisel olarak, diğer birçok katılımcı gibi, bana göre en önemli gösterge olan maksimum kârın maksimum düşüşe oranını (oran: kâr / düşüş) bulmaya çalışıyorum. Test cihazı çalıştırması tamamlandıktan sonra bu prosedürü manuel olarak yapıyorum. Bu süreci otomatikleştirmek mümkün mü? Veya her biriniz bu parametreyi nasıl tanımlıyorsunuz? Şimdiden teşekkürler.

bunu beğendim

 //+---------------------- OnTester() --------------------------------+
double OnTester ()
{
double Result     = 0 ;
double Profit     = TesterStatistics ( STAT_PROFIT );
double Drowdown   = TesterStatistics ( STAT_EQUITY_DD );

if (Drowdown> 0 )
Result = Profit/Drowdown;
else Result = 0 ;

   return ( NormalizeDouble (Result, 2 ));
}
//+------------------------------------------------------------------+