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

 
Vladimir :
Kaynak kodunun alınması ve düzeltilmesi konusunda danışman (veya komut dosyası) emrinizdeyse bir fırsat vardır. Düğmeye basılıp basılmadığını kontrol ederek tüm uyarılara bir koşul koymak gerekir. Basılmazsa, uyarılar aranmaz.

Teşekkürler Vladimir - Sanırım ya sizin yönteminizi kullanacağım ya da tüm danışmanı bu duruma sokacağım.

Teşekkürler Vitalie Postolache - tavsiyenizi dikkate alacak. Henüz mql5'e girmedim.

 
miss.natasha :

Bir hst dosyasına veri yazmaya ihtiyaç vardı, böylece daha sonra bu verilere dayanarak çevrimdışı bir grafik oluşturmak için.

İkinci gün kavga ediyorum ama hiçbir şey elde edilmiyor.

kod:

#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict
ulong     last_fpos= 0 ;         //
int       HandleHistory=- 1 ;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   string symbol= Symbol ();
   int per= Period ()* 9 ;

   ResetLastError ();
   if (CreateHeader()== true ) //если создали заголовок
     {
      HandleHistory= FileOpenHistory (symbol+( string )per+ ".hst" , FILE_BIN | FILE_WRITE | FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_ANSI );
       if (HandleHistory!= INVALID_HANDLE )
        {

         for ( int i= 199 ;i> 0 ;i--) //заполняем данными
           {
             MqlRates r;
            r.time= Time [i]; //просто пытаюсь записать, это так для примера
            r.open= Open [i]; //просто пытаюсь записать, это так для примера
            r.low= Low [i];
            r.high= High [i];
            r.close= Close [i];
            r.tick_volume=( long ) 10 ;
            r.spread= 0 ;
            r.real_volume=( long ) 10 ;
             uint byteswritten= FileWriteStruct (HandleHistory,r);
             Print ( "FileOpen OK " ,byteswritten, " " , Time [i]);
           }
       FileClose (HandleHistory);
       // FileFlush(HandleHistory);
        }
       else Print ( "Операция FileOpen неудачна, ошибка " , GetLastError ());
     }
// long id=ChartOpen(symbol,per);
//Alert(id);
  }
//+------------------------------------------------------------------+
bool CreateHeader() //создаем файл с историей hst(заголовок)
  {

   int       file_version= 401 ;
   string    c_copyright;
   string    c_symbol= Symbol ();
   int i_period= Period ()* 9 ;
   int       i_digits= Digits ;
   int       i_unused[ 13 ];
//---  
   ResetLastError ();
   HandleHistory= FileOpenHistory (c_symbol+( string )i_period+ ".hst" , FILE_BIN | FILE_WRITE | FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_ANSI );
   if (HandleHistory< 0 )
     {
       Print ( "Error open " ,c_symbol+( string )i_period, ".hst file " , GetLastError ());
       return ( false );
     }
   c_copyright= "(C)opyright 2003, MetaQuotes Software Corp." ;
   ArrayInitialize (i_unused, 0 );
//--- write history file header
   FileWriteInteger (HandleHistory,file_version, LONG_VALUE );
   FileWriteString (HandleHistory,c_copyright, 64 );
   FileWriteString (HandleHistory,c_symbol, 12 );
   FileWriteInteger (HandleHistory,i_period, LONG_VALUE );
   FileWriteInteger (HandleHistory,i_digits, LONG_VALUE );
   FileWriteInteger (HandleHistory, 0 , LONG_VALUE );
   FileWriteInteger (HandleHistory, 0 , LONG_VALUE );
   FileWriteArray (HandleHistory,i_unused, 0 , 13 );
   return ( true );
  }

Yürütme sonucunda, geçmişi olan bir dosya oluşturulur, ancak çevrimdışı bir grafik oluşturulmaz.

İşte program bilgisi

Veriler neden 2003'te yazılıyor!

Sonuç olarak, grafiği başlatırken bir hata alıyorum: HistoryBase: 'NZDCHF45' içinde 196 hata

Yanlış bir şey yazdığımı anlıyorum. Ama nasıl doğru yazacağımı bilmiyorum, yeterli bilgi yok. Kim bilir - söyle bana.


MQ'nun .hst dosyalarının yapısını resmi olarak açtığını hatırlamıyorum (eğer açmışlarsa resmi özelliklere bakmanız gerekir)

belki yardımcı olur, çok, çok eski bir projeden (C, gcc) bir alıntı:


/* .hst file header
*/
struct HstHeader {
    uint32_t    version;        // +0 4 LE  : database version
    char        copyright[64];  // +4 64    : copyright data
    char        symbol[12];     // +68 12   : symbol (EURUSD..)
    uint32_t    period;         // +80 4 LE : timeframe (sec. in period)
    uint32_t    digits;         // +84 4 LE : decimals after .
    datetime    timesign;       // +88 4 LE : creation time sign.
    datetime    last_sync;      // +92 4 LE : last sync. timestamp
    uint8_t     unused[52];     // +96 52   : reserved for feauture use
                                // total 148 bytes, packed, aligned by 1
};

/* .hst bar array (file payload)
*/
// when HstHeader.version==400
struct HstRates400 {
    datetime    ctm;            // +0 4 LE  : start (creation) time
    double      open;           // +4 8 LE  : open price
    double      low;            // +12 8 LE : lowest price
    double      high;           // +20 8 LE : highst price
    double      close;          // +28 8 LE : close price
    double      volume;         // +36 8 LE : volume (nr of ticks)
                                // total 44 bytes,packed, aligned by 1
} __attribute__((packed));

// when HstHeader.version==401

struct HstRates401 {
    datetime    ctm;            // +0 8 LE  : bar start time (with ms?)
    double      open;           // +8 8 LE  : open price
    double      low;            // +16 8 LE : lowest price
    double      high;           // +24 8 LE : highst price
    double      close;          // +32 8 LE : close price
    uint64_t    volume;         // +40 8 LE : volume (nr of ticks)
    uint32_t    spread;         // +48 4 LE : spread
    long        real_volume;    // +52 8 LE : real volume
                                // total 60 bytes,packed,aligned by 1
} __attribute__((packed));


Şimdi, yıllar sonra baktım ve yüksek/düşük'ün bu sırada olması gerektiğinden emin değilim, ancak en azından yapıların boyutlarına sahip olduğunuzu kontrol edin (başlık ve kayıtlar)
 

Herkese merhaba, zaten orada olanı iyileştirmeye devam ediyorum

Düzensiz bir sipariş ızgaramız ve her yerde olabilen yatay bir çizgimiz var.

bunu uygulamanız gerekir:

fiyatımız çizginin altındaysa, tüm siparişleri kapatın

zorluklar şu ki

1) siparişler düzensiz tipteyse ve ne zaman yerleştirileceği, işaretleneceği ve ayarlanacağı değil, hattı yerleştirirken herhangi bir şey gizliyse (ve o zaman hala bir tür bayrak açma / kapamaya ihtiyacınız var)

2) türe göre satırın üst kısmında sağdaki yazının uygulanması (siparişler bu fiyattan kapatılırsa, sonuç bakiyeye göre olacaktır, yani zaten her tikte ve ayrıca ne zaman ekranı değiştirmeniz gerekiyor? satırı, genel olarak, manuel olarak sipariş verirken tp veya sl'ye benzer şekilde hareket ettirmek, yalnızca kayan ve başlangıçta yanlış pozitif olasılığı ile)

bir robot var, sayısal etiket dışında her şey zaten çizildi, soru değerlerin doğru atanması ve tüm ızgara bilgilerinin işlenmesidir.

Dosyalar:
USDCHFH1.png  26 kb
 
trader781 :


1) siparişler düzensiz tipte ise

Bunları ilk defa duydum.
 
Merhaba. iTime neden bazen yanlış zaman veriyor anlamıyorum. Yeni bir PERIOD_H1 mumunun açılması, Print(iTime(NULL, PERIOD_M1 ,30)) günlüğündeki zamanı göstermelidir. Testlerde her şey doğru görüntüleniyor, ancak gerçek hayatta bazen zaman birkaç saat bile farklılık gösteriyor. Nedenmiş?
 
Nauris Zukas :
Merhaba. iTime neden bazen yanlış zaman veriyor anlamıyorum. Yeni bir PERIOD_H1 mumunun açılması, Print(iTime(NULL, PERIOD_M1 ,30)) günlüğündeki zamanı göstermelidir. Testlerde her şey doğru görüntüleniyor, ancak gerçek hayatta bazen zaman birkaç saat bile farklılık gösteriyor. Nedenmiş?

CopyTime kullanın, grafik nesnelerini çizerken de bu sorunu fark ettim ve CopyTime sorunu çözdü

datetime TM[];
if ( CopyTime ( Symbol (), Period (), 0 , 1 ,TM)< 0 ) return ;
TIME0=TM[ 0 ];
 
Vitaly Muzichenko :

CopyTime kullanın, grafik nesnelerini çizerken de bu sorunu fark ettim ve CopyTime sorunu çözdü

datetime TM[];
if ( CopyTime ( Symbol (), Period (), 0 , 1 ,TM)< 0 ) return ;
TIME0=TM[ 0 ];
Teşekkür ederim!
 
Evgeny Belyaev :
Bunları ilk defa duydum.
Sadece bir nesneye bağlı yüzen bir çekime ihtiyacım var.
 
Göstergemin ölçeğinde 5 ondalık basamağı nasıl alabilirim?

Burada grafikte 5, göstergede 4 işaret var.
 
igrok333 :
Göstergemin ölçeğinde 5 ondalık basamağı nasıl alabilirim?

Burada grafikte 5, göstergede 4 işaret var.
IndicatorSetInteger ( INDICATOR_DIGITS , Digits ());