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

 
Grafikten gelen istek, RefreshRates'e değil, CopyRates ArrayCopySeries'e benzer. CopyRates , ticari olmayan tek sunucu kıpırdatma işlevidir.
 
Zhunko :
Bir grafik açıldığında ve güncellendiğinde, sunucuya yeni veriler için bir istek gönderilir. Bazı açgözlü DC'ler, paralarını daha güçlü sunucularda ve daha geniş bir kanalda değil, ceplerine koymayı tercih ediyor. Zayıf sunucunun "askıda kalmaması" için terminalden gelen istek sayısını sınırlamaları gerekir. MRC'nin günde yalnızca 2000 isteği vardır. Bu, ticaret taleplerini hesaba katmadan, TF'lerin sayısı ile çarpılan enstrümanlarının sayısından 10 kat daha azdır.
Bu, bu tür mutfaklardan kaçınmanız gerektiği anlamına gelir. MRC hakkında, ilk defa bir olumsuzluk duyuyorum, bileceğim. Burada, yalnızca terminali veya aynı şeyi açıklığa kavuşturmak için kalır, işlevler de (ticaret hariç) sunucuya erişir. Bu soruyu destek olarak sordum (yukarıda bunun hakkında zaten yazdım, henüz cevap vermediler). Sadece değilse, o zaman her şey yerine oturur ve yalnızca terminal ise, genellikle terminalin başlatılması saçmadır ve teklifleri güncellemek için sunucuyla iletişim kurarsa, ticaret yapmadan sınırı aşacaktır. Bence bu yeterli değil ve yine de Victor'un dediği gibi ticaret dışında işlevler sunucuya erişmiyor.

Zhunko :

MQL4'teki eklemeler, kodu düzenlemeye yardımcı olur. Örneğin, göstergem 3000 satır için böyle görünüyor.

Gerçek şu ki, kütüphaneleri gördüm ve belgelerde de genellikle global değişkenlerin bildirildiği kodun en üstünde include bildirdikleri söyleniyor. Eğer içermelerde fonksiyonlar varsa, o zaman global değişkenlerin bildirildiği yerde, o yere dahil edilmesinin bir sonucu olarak aslında bir fonksiyonun olacağını ve bir seçenek olarak, bir şekilde değişkenlerin bir şekilde olacağını hayal etmek bence garip. . Kodlar böyle yazılmaz. Expert Advisor'da kullanılan değişkenler ve harici kullanıcı değişkenleri en üstte bildirilmişse, kimse bunların yanına işlev koymaz! Ancak, işlevlerin bulunduğu içerme yerleştirilir ve bu, anladığım kadarıyla normal kabul edilir. Burada kafamı en çok karıştıran şey bu.

Nedense mantıklı gelmiyor...

Öte yandan, içerme bir yere yerleştirilirse. Diyelim ki bir bazda bir alım satım sinyali almaktan sorumlu olan birkaç fonksiyon yerine, bu mantıklı ve okunabilir bir an olacaktır.

Zhunko :

Ne yazık ki, derleyici tek bir içermenin aynı modülde birden fazla kullanılmasına izin vermiyor. Bu genellikle tekrarlayan koddan tasarruf sağlar.

Eh, bu zaten bir önemsememek. Sonuçta, ana şey, ana hacimli işlevleri ve kod parçalarını ana koddan çıkarmak ve bunları bir içerme yoluyla çağırmaktır. Ve daha sonra zaten içeride, fonksiyon adına dahil ettiğim fonksiyona erişmek mümkün olacak ... Ve belirli bir kısıtlama olduğu gerçeğiyle uğraşmanıza gerek kalmayacak.
 

Herkese iyi günler.

MarketInfo ( ) ve Print ( ) fonksiyonlarını öğrenme

İşte bu işlevleri kullanan basit bir kod

Test cihazı, TF 60 dak.

 double T ;
int start()
{
T = MarketInfo( "EURUSD" ,MODE_HIGH); // в глобальную переменную Т запоминаем максимум дневной свечи,который должна возвращать  MarketInfo ( )
Print ( " corresponds to " , T );           //
if ( T > iHigh( Symbol (), 0,10) )  // если максимум текущей дневной свечи > High свечи N10 (ТФ60 мин)
OrderSend(Symbol(),OP_SELL,0.1,Bid,1,0,0,"jfh",123 ); открыть ордер
}                                                                                                                       
return ;

ПРОБЛЕМА 1.Ордер не открывается 2.Print() постоянно возвращает 0 ПРИМЕЧАНИЕ. Для открытия ордера - мне нужной сравнивать параметры свечей разных ТФ (60 мин и 1440 мин.) Подскажите пожалуйста как это можно сделать. Спасибо.

 
Integer :
Grafikten gelen istek, RefreshRates'e değil, CopyRates ArrayCopySeries'e benzer. CopyRates, ticari olmayan tek sunucu kıpırdatma işlevidir.

RefreshRates() kontrol edildi. Bu Expert Advisor, örneğin EURUSD'de başlatılırsa ve ayarlara başka bir enstrüman eklenirse, uzun süredir açılmamış bir pencere (böylece geçmiş yok), o zaman geçmiş görünür.

 extern string Tool           = "AUDNZD" ; // Имя инструмента.
extern bool    IsRefreshRates = true ;     // Флаг включения обновления таймсерий.
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
void start()
 {
   string sTool = Tool; // Имя инструмента.
   if (Tool == "" ) sTool = Symbol ();
   while (! IsStopped ())
   {
     if (IsRefreshRates) RefreshRates();
     string sComment = StringConcatenate ( "MarketInfo()\n" ,
                                        TimeToStr(MarketInfo(sTool, MODE_TIME), TIME_DATE|TIME_MINUTES|TIME_SECONDS), "\n" ,
                                        DoubleToStr(MarketInfo(sTool, MODE_BID), Digits ), "  " , DoubleToStr(MarketInfo(sTool, MODE_ASK), Digits ),
                                         "\n\nПредопределенные переменные\n" ,
                                        TimeToStr(Time[ 0 ], TIME_DATE|TIME_MINUTES|TIME_SECONDS), "\n" ,
                                        DoubleToStr(Bid, Digits ), "  " , DoubleToStr(Ask, Digits ),
                                         "\n\nМассивы-таймсерии\n" );
     for ( int i = 0 ; i < 10 ; i++)
     {
      sComment = sComment + StringConcatenate (TimeToStr(iTime(sTool, 0 , i), TIME_DATE|TIME_MINUTES|TIME_SECONDS), "  " ,
                                              DoubleToStr(iOpen(sTool, 0 , i), Digits ), "  " ,
                                              DoubleToStr(iLow(sTool, 0 , i), Digits ), "  " ,
                                              DoubleToStr(iHigh(sTool, 0 , i), Digits ), "  " ,
                                              DoubleToStr(iClose(sTool, 0 , i), Digits ), "  " ,
                                              DoubleToStr(iVolume(sTool, 0 , i), 0 ), "\n" );
     }
     Comment (sComment);
     Sleep ( 300 );
   }
 }

Yine de RefreshRates() sunucuyu çağırır ve geçmişi hızlandırır. Sonuç olarak, tarihin gelişini kontrol etmek gerekir.

Ve destek olarak, tek bir işlevin sunucuya doğrudan erişmediğini söyleyecekler. Gibi, her şey terminalden yapılır :-)

 
TarasBY :
GetProfitFromDateInCurrency () kullanıyorsanız (orijinal olan ÖNEMLİ: Orada sürümünüzde ne "alabileceğinizi" bilmiyorum), o zaman şöyle çağırmanız gerekir:

ve fonksiyon, cari günün başlangıcından beri kapatılan siparişlerde kârı döndürür.

Ve koddaki TÜM saçmalıklar Print () aracılığıyla yakalanır.


çalışmıyor. Tüm geçmiş için işlemlerde mevcut tüm karı verir.

işte orijinal işlev ve doğal olarak hiçbir şeyi değiştirmedim

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает суммарный профит в валюте депозита                  |
//|             закрытых с определённой даты позиций                           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента             (""   - любой символ,         |
//|                                               NULL - текущий символ)       |
//|    op - операция                             (-1   - любая позиция)        |
//|    mn - MagicNumber                          (-1   - любой магик)          |
//|    dt - Дата и время в секундах с 1970 года  ( 0   - с начала истории)     |
//+----------------------------------------------------------------------------+
double GetProfitFromDateInCurrency( string sy= "" , int op=- 1 , int mn=- 1 , datetime dt= 0 )
{
   double p= 0 ;
   int     i, k=OrdersHistoryTotal();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) {
       if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || OrderType()==op)) {
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
           if (mn< 0 || OrderMagicNumber()==mn) {
             if (dt<OrderCloseTime()) {
              p+=OrderProfit()+OrderCommission()+OrderSwap();
            }
          }
        }
      }
    }
  }
   return (p);
}

işte onun meydan okuması ve baskısı

GetProfitFromDateInCurrency ( Symbol (), - 1 , - 1 , iTime ( NULL , PERIOD_D1 , 0 ));  
Print (   GetProfitFromDateInCurrency () );
 
Zhunko :

RefreshRates() kontrol edildi. Bu Expert Advisor, örneğin EURUSD'de başlatılırsa ve ayarlara başka bir enstrüman eklenirse, uzun süredir açılmamış bir pencere (böylece geçmiş yok), o zaman geçmiş görünür.

Yine de RefreshRates() sunucuyu çağırır ve geçmişi hızlandırır. Sonuç olarak, tarihin gelişini kontrol etmek gerekir.

Ve destek olarak, tek bir işlevin sunucuya doğrudan erişmediğini söyleyecekler. Gibi, her şey terminalden yapılır :-)


Vadim, senaryonu ana dallar ve yen ile çaprazlar dışında hiçbir enstrümanı açmadığım terminalde çalıştırdım. Genel olarak, işte ekran görüntüsü:

Hiçbir şey indirilmiyor, tk. yorumlara bakılırsa piyasa veri dizisi boş..

 
hoz :


Vadim, senaryonu ana dallar ve yen ile çaprazlar dışında hiçbir enstrüman açmadığım terminalde çalıştırdım. Genel olarak, işte ekran görüntüsü:

Hiçbir şey indirilmiyor, tk. yorumlara bakılırsa piyasa veri dizisi boş..


Evet. Ayrıca, EA'sında sadece RefreshRates() değil, MarketInfo() olduğunu da fark etmedi.
 
Zhunko :

Kontrol edilen RefreshRates(). Bu Expert Advisor, örneğin EURUSD'de başlatılırsa ve ayarlara başka bir enstrüman eklenirse, uzun süredir açılmamış bir pencere (böylece geçmiş yok), o zaman geçmiş görünür.

Yine de RefreshRates() sunucuyu çağırır ve geçmişi hızlandırır. Sonuç olarak, tarihin gelişini kontrol etmek gerekir.

Ve destek olarak, tek bir işlevin sunucuya doğrudan erişmediğini söyleyecekler. Gibi, her şey terminalden yapılır :-)


Etkileyici düzeyde şiddet içeren fanteziler. Veriler neden sadece bazı semboller (henüz açılmamış) için ortaya çıktı ve piyasa incelemesinde bulunanların tümü için görünmüyor? RefreshRates() işlevi, bazı karakterlerin güncellenmesi gerektiğini ve bazılarının gerekmediğini zor bir şekilde nasıl öğrendi?

Junko, saçmalamayı kes.

 
lottamer :


çalışmıyor. Tüm geçmiş için işlemlerden elde edilen tüm karı dağıtır.

işte orijinal işlev ve doğal olarak hiçbir şeyi değiştirmedim

işte onun meydan okuması ve baskısı

GetProfitFromDateInCurrency ( Symbol (), - 1 , - 1 , iTime ( NULL , PERIOD_D1 , 0 ));  
Print (   GetProfitFromDateInCurrency () );

Pekala, sorun değil. Fonksiyonu satır satır "okuyorsunuz" ve nasıl çalıştığını anlayacağım, eğer kendiniz yazarsanız ve her şey yerine oturacaktır ..

Bir işlev parametreniz var:

iTime ( NULL , PERIOD_D1 , 0 )

günün son çubuğunun açılış saati, yani. o gün açılmadan önce kapatılan tüm pozisyonlar hesaplanacak ve özetlenecektir! mantıklı mı? Bu yüzden ihtiyacınız olan veya elinizde ne varsa başka bir çubuk koyun. Ama kendin gör.

 
Integer :

Evet. Ayrıca, EA'sında sadece RefreshRates() değil, MarketInfo() olduğunu da fark etmedi.


Diğer tüm özellikler:


DoubleToStr(iOpen(sTool, 0, i), Rakamlar), " ",
DoubleToStr(iLow(sTool, 0, i), Rakamlar), " ",
DoubleToStr(iHigh(sTool, 0, i), Rakamlar), " ",
DoubleToStr( iClose (sTool, 0, i), Rakamlar), " ",
DoubleToStr(iVolume(sTool, 0, i), 0), "\n");

Doğal olarak, veriler güncellenecektir.

Neden: