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

 
iruogl :

ben acemiyim

İnsanlar lütfen bana, kene her değiştiğinde robotun etkinleştirildiğini nasıl bildiğimi söyleyin. Ve sadece yeni bir mum açıldığında, yani mumun açılış fiyatının görünümünde nasıl etkinleştirilir.

Herkese tavsiye için teşekkürler.


Genel olarak, ben de acemiyim, ancak global düzeyde bir tarih saat türü değişkeni (örneğin, tarihsaat TIME;) bildirmek gerektiğini düşünüyorum, init() içinde ona son çubuğun açılış zamanının değerini atayın , start()'ın başında TIME== Time[0 ] -- return(0); , değilse -- ZAMAN= Zaman[0]; . Bu durumda, EA, yeni bir çubuk açarken start() işlevini yalnızca bir kez yürütür.
 
paladin80 :
Herhangi bir sayı >= ve <= kullanılarak birbirleriyle karşılaştırılabilir. Normalleştirmeden sonra, NormalizeDouble zaten == veya != olarak karşılaştırılabilir. Ancak burada, örneğin sayıları bu şekilde karşılaştırmanın mantıklı olup olmadığına bakmak gerekir. 10 ondalık basamakla, bunların eşit veya eşitsiz olacağı bir durum bulmak gerçekçi değildir.

Cevabınız için çok teşekkür ederim. Soruyu netleştiriyorum: normalleştirmeden sonra bilgisayarın belleğindeki sayı aynı kalıyor ve sadece temsili değişiyor. Yoksa sayının kendisi mi değişiyor?
 
rigonich :

Cevabınız için çok teşekkür ederim. Soruyu netleştiriyorum: normalleştirmeden sonra bilgisayarın belleğindeki sayı aynı kalıyor ve sadece temsili değişiyor. Yoksa sayının kendisi mi değişiyor?

Normalleştirmeden sonra sayı değişir, örneğin:

 double var1= 0.1234 5 6789 ;
double var2= NormalizeDouble (var1, 5 ); // var2=0.1234 6

Başka bir şey, DoubleToStr kullanarak yazdırdığınızda, örneğin:

 double var1= 0.1234 5 6789 ;
Print ( "var1 = " , DoubleToStr (var1, 5 )); // Выход: var1=0.1234 5

Ve normalleştirmeden sonra yazdırırsanız, şöyle olacaktır:

 double var1= 0.1234 5 6789 ;
double var2= NormalizeDouble (var1, 5 );   // var2=0.1234 6
Print ( "var2 = " , DoubleToStr (var2, 5 )); // Выход: var2=0.1234 6
 
paladin80 :

Bu işlev yalnızca mumun göründüğü anı belirler. Açılış fiyatını bulmak için iOpen'ı kullanın. Bunun gibi bir şey:


Teşekkürler, çok yardımcı oldunuz
 
okvseok :

Lütfen bana söyle!

Bir sayfa yazdırmak mümkündür, ancak sayfaların yazdırılması belirli bir tarihten ve belirli bir tarihten önce başlayacak şekilde nasıl ayarlanır. Bir seferde bir sayfa yazdırmamak.

Teşekkür ederim!



aldırmamak)
 
Güzel gün! Biliyorsun, bir şey benim için çalışmıyor senaryo. Grafiğe atıyorum (sürükle), hiçbir şey olmuyor.
 
Başlangıç, her tikte kaçınılmaz olarak gerçekleştirilir, ancak bunun için gerekli koşullar sağlanabilir.
 
Güzel gün! Biliyorsun, bir şey benim için çalışmıyor senaryo. Grafiğe atıyorum (sürükle), hiçbir şey olmuyor. Bu nasıl kullanılır??
 //+------------------------------------------------------------------+
//|                                                      Покупка.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
for ( int i= 0 ;i<= OrdersTotal ();i++){
   if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true)
 { if ( OrderSymbol () != Symbol ()) continue ; 
   if ( OrderType ()==OP_SELL) 
   OrderClose ( OrderTicket (), OrderLots (),Ask, 6 , Red );
   if ( OrderType ()==OP_BUY)
   OrderClose ( OrderTicket (), OrderLots (),Bid, 6 , Red );
   if ( OrderType ()>= 2 )
   OrderDelete ( OrderTicket ());}} 
//----
   for (i= 0 ;i< 23 ;i++){
     Sleep ( 2000 ); RefreshRates (); if (! IsTradeAllowed ()) continue ;
     int tiket= OrderSend ( Symbol (),OP_BUY, 0.1 ,Ask, 6 , 0 , 0 , "Skript" , 98600 , 0 , Blue );
   if ( tiket!=- 1 ) break ;
   if (tiket==- 1 ){ int Error= GetLastError ();  
             string errorcomment = "Ошибка открытия  ордера OP_BUY"   + " " + Symbol () +   " " + ErrorDescript(Error); 
             Print (errorcomment);}}
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+

//------- :  Коды ошибок
string ErrorDescript( int error_code){ string error_string; switch (error_code){
       //---- Коды ошибок, возвращаемые торговым сервером:
       case 0 :   error_string= "Нет ошибок" ;                                                                                             break ;
       case 1 :   error_string= "Нет ошибки, но результат неизвестен" ;                                                                     break ;
       case 2 :   error_string= "Общая ошибка" ;                                                                                           break ;
       case 3 :   error_string= "Неправильные параметры" ;                                                                                 break ;
       case 4 :   error_string= "Торговый сервер занят" ;                                                                                   break ;
       case 5 :   error_string= "Старая версия клиентского терминала" ;                                                                     break ;
       case 6 :   error_string= "Нет связи с торговым сервером" ;                                                                           break ;
       case 7 :   error_string= "Недостаточно прав" ;                                                                                       break ;
       case 8 :   error_string= "Слишком частые запросы" ;                                                                                 break ;
       case 9 :   error_string= "Недопустимая операция нарушающая функционирование сервера" ;                                               break ;
     
 
paladin80 :

Normalleştirmeden sonra sayı değişir, örneğin:

Başka bir şey, DoubleToStr kullanarak yazdırdığınızda, örneğin:

Ve normalleştirmeden sonra yazdırırsanız, şöyle olacaktır:


Teşekkür ederim.
 

Tünaydın.

Yalnızca son iki alış pozisyonunun toplam kârını hesaplamak gerekir. Kod nasıl değiştirilir?

 double profits_buy_2pos()
{
   double pr_buy = 0 ;
   int cnt = 0 ;
   int OpenOrders= OrdersTotal ();
   for (cnt= 0 ;cnt<OpenOrders;cnt++)   // scan all orders and positions. ..
   {
     OrderSelect (cnt, SELECT_BY_POS);
           if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==magic && OrderType () == OP_BUY)
          {     
           if ( OrderType ()==OP_BUY) 
          {
            pr_buy+= OrderProfit ();
          } 
          }                               
   } 
return (pr_buy);   
}