Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 1129
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
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.
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 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.
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));
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.
1) siparişler düzensiz tipte ise
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ü
if ( CopyTime ( Symbol (), Period (), 0 , 1 ,TM)< 0 ) return ;
TIME0=TM[ 0 ];
CopyTime kullanın, grafik nesnelerini çizerken de bu sorunu fark ettim ve CopyTime sorunu çözdü
if ( CopyTime ( Symbol (), Period (), 0 , 1 ,TM)< 0 ) return ;
TIME0=TM[ 0 ];
Bunları ilk defa duydum.
Burada grafikte 5, göstergede 4 işaret var.
Göstergemin ölçeğinde 5 ondalık basamağı nasıl alabilirim?
Burada grafikte 5, göstergede 4 işaret var.