Hai,
Saya mempunyai idea yang sangat istimewa untuk semua orang yang menyalahkan MT4MT5 kerana tidak menggambar trendline yang betul dan betul menggunakan Charts Linear yang digunakan MT4MT5.
Bolehkah Coder mana pun boleh mengubah Pengubah selang ini dari Standard MT4-Arithmetic-Linear Standard kepada Skala Carta Logaritmik.
Saya percaya ini adalah satu-satunya cara untuk memperoleh Carta Logaritma di MT4MT5 untuk semua Trendline-Lovers teknikal.
Inilah kod sumber dan kod sumber:
// ------------------------------------ ----------- -------------------
//| Period_Converter_Opt. mq4 |
//| Hak cipta (c) 2005, MetaQuotes Software Corp .. |
//|
http://www.metaquotes.net|
//| Ver.1.6 Diubah oleh micclly |
//| Ver.1.5 Diubah oleh fai |
//| Diubah oleh wfy05 @ talkforex berdasarkan Period_Converter |
//|
http://www.talkforex.com|
// ------------------------------------ ----------- -------------------
#property hak cipta
#property pautan http://www.mql4.com/codebase/indiors/277/
#property indior_chart_window
#include lt; WinUser32.mqhgt;
/*
Baca saya:
I. Ciri-ciri:
Ini adalah versi penukar selang yang lebih baik untuk MT4 berdasarkan kepada
Penukar tempoh lalai MT4 dengan metaquotes.
Skrip penukar interval lalai tidak menggalakkan penyegaran masa nyata,
dan menggunakan banyak CPU (50% -9xpercent) menjadikan seluruh sistem perlahan.
Selain itu, lalai adalah skrip yang tidak ditarik apabila anda keluar dari MT4,
supaya anda perlu memohon setiap skrip penukar sekali lagi selepas memulakan semula, cukup
mengganggu.
Ini yang mendedahkan semua isu:
1. Selang kebiasaan atau mengemaskini peningkatan gelaran milisaat.
2. Kos rendah CPU, tipikal 5% -10percent atau kurang.
3. Bekerja sebagai penunjuk, jadi boleh disimpan dan dimuat semula semasa resume.
4. Tidak ada penukar per batasan carta kerana ia bukan skrip
lagi, hanya boleh menggunakan satu tetingkap sebagai sumber untuk menghasilkan sebanyak mungkin
carta masa baru yang mungkin.
5. Mengemas kini secara automatik jika terdapat blok sejarah baru dimuatkan.
II. Bagaimana nak guna:
Duplikat fail mq4 ke folder penunjuk MT4 (pakar \ indikator)
untuk memasangnya sebagai penunjuk, BUKAN skrip. Kemudian dalam indikator adat
rekod, lampirkan period_converter_opt ke carta yang anda perlukan.
Ia menggalakkan 4 parameter:
PeriodMultiplier: pembolehubah pengganda fasa baru, lalai adalah 2
UpdateInterval: selang kemas kini dalam milisaat,
sifar menandakan kemas kini masa nyata. lalai adalah sifar.
Diaktifkan: Anda boleh mematikannya tanpa mengeluarkannya dengan alternatif ini.
Parameter lain termasuk komen atau debugging, adalah selamat untuk mengabaikannya.
Juga Pastikan bahawa anda mempunyai alternatif import Dll Permit yang diperiksa dalam tab kongsi
ia tidak akan berfungsi
Kemudian, FileOpen Offline untuk membuka maklumat offline yang dihasilkan. Selepas itu
Maklumat luar talian akan dikemas kini secara automatik.
Selagi anda mengekalkan carta sumber terbuka dan penunjuk converter
berjalan, carta yang dihasilkan termasuk petunjuk di dalam akan sentiasa
dikemas kini. Juga anda boleh menutup carta yang dihasilkan dan buka lagi
kemudian dari FileOpen Offline tanpa masalah.
Jika anda mahu menghentikan MT4, adalah mungkin untuk meninggalkan carta luar talian yang lain
carta dalam talian biasa. Apabila anda memulakan MT4 kali seterusnya, carta ini akan
juga dimuatkan dan dikemas kini.
III. Nota:
1. TIDAK centang pilihan carta luar talian dalam carta luar talian yang dikongsi bersama.
Atau selepas dimulakan semula MT4, ia akan merawat carta itu sebagai carta dan permintaan dalam talian
maklumat dari pelayan, menghasilkan tetingkap carta kosong.
2. Adalah mungkin untuk melampirkan lebih daripada satu penukar ke tetingkap yang sama menggunakan berbeza
PeriodMultiplier, mis. Anda boleh melampirkan 3 penukar menggunakan
PeriodMultiplier = 2, 4, 10 hingga M1 untuk menjana M2, M4, M10 pada masa yang sama.
Ia juga ok untuk menggunakan carta M1 untuk menjana carta Jam seperti H2, yang mana
hanya kos beberapa sumber CPU semasa penukaran awal. Tetapi biasanya
kebanyakan pelayan tidak mempunyai banyak maklumat untuk tempoh yang singkat. Akibatnya
Maklumat yang dijana tidak cukup lama untuk tempoh lanjutan. Jadi ia dicadangkan
untuk menggunakan carta MasaHarian sebagai sumber apabila diperlukan.
3. Peningkatan naik taraf mod sebenar masa sebenar secepat mungkin, namun sebagai
ini dicapai melalui skrip, dan MT akan melangkau panggilan mula () berfungsi apabila
bahawa PC anda sibuk dan banyak pendapatan sebut harga. Bagaimanapun, ini jarang berlaku,
dan anda sekurang-kurangnya boleh mendapatkan 10 upgrade setiap saat yang lebih banyak lagi
daripada mencukupi.
4. Carta luar talian tidak mempunyai garis tawaran yang mendedahkan dalam carta, namun semua data
dalam carta termasuk indikator masih dikemas kini,
jadi jangan risau. Anda boleh menunjukkan garis bida dengan menanggalkan carta luar talian
alternatif dalam ciri carta. Tetapi yang tidak banyak membantu dan harus diabaikan
untuk menyemak pilihan carta luar talian sebelum keluar. Ia akan menyebabkan kesilapan dan
menjadi kosong pada permulaan seterusnya. Anda perlu menutup tetingkap dan mula
sekali lagi dari FileOpen di luar talian, yang biasanya tidak bernilai masalah.
IV. Sejarah:
2014.03.10 1.6 Digubah untuk menggalakkan pembinaan 600 dan selepasnya
2009.08.07 1.5 Menambah 3 pilihan. (ShiftTiming, GMTShift, OmitD igit)
2005.12.24 1.4 lebih cepat untuk mengesan sama ada data berubah dengan mengeluarkan titik terapung
operasi, sokongan tambahan untuk mengeluarkan fail CSV dalam masa nyata.
OutputCSVFile = 0 tidak menandakan CSV.
OutputCSVFile = 1 menandakan CSV HST
OutputCSVFile = 2 CSV sahaja, tiada HST.
(membantu jika anda ingin menjana CSV untuk dibina selang)
Nama fail CSV akan sama dengan dokumen HST kecuali pengembangannya.
Menambah penentuan perlindungan untuk PeriodMultiplier.
2005/12/04 1.3 Memperbaiki maklumat yang hilang apabila terdapat banyak data
dimuatkan dalam beberapa blok, dan menggalakkan peningkatan auto
apabila sejarah baru diisi.
2005.11.29 1.2 Menambah fail untuk kehilangan data dan pelayan yang berubah.
2005.11.29 1.1 Memperbaiki maklumat separa yang hilang selepas memulakan semula.
Reinitialize selepas menukar data atau pelayan yang rosak.
2005.11.28 1.0 Pelepasan permulaan
*
extern double Version = 1.6;//versi kod
siri extern BuildInfo = 2014.03.10 oleh micclly;
extern int PeriodMultiplier = 1;/pemboleh ubah pengganda fasa baru
extern int OutputCSVFile = 0;/Tambahan fail CSV output?
Extern int UpdateInterval = 0;/selang kemas kini dalam milisaat, sifar menandakan kemas kini masa nyata.
Extern bool Enabled = true;
extern bool Debug = false;
extern int ShiftTiming = 0;/0-3, Menggunakan H1Chart dan PeriodMultiplier = 4;
//jika 1, ServerH4Chart = 00: 00/04: 00/08: 00/12: 00 ...
//= gt; OfflineH4Chart = 01: 00/05: 00/09: 00/13: 00 ...
extern int GMTShift = 0;/harus 9, Masa Pelayan = GMT 0 Carta Offline Time = GMT 9
extern int OmitDigit = 0;/jika 1, 5 Digit 4 Digit
int FileHandle = -1;
int CSVHandle = -1;
int NewPeriod = 0;
siri MySymbol =;
int ShiftBase;
#define OUTPUT_HST_ONLY 0
#define OUTPUT_CSV_HST 1
#define OUTPUT_CSV_ONLY 2
#define CHART_CMD_UPDATE_DATA 33324
void DebugMsg (msg string)
jika (Debug) Alert (msg);
int init ()
ShiftBase = Tempoh () * 60;/sec
akhiran siri =;
jika (ShiftTiming! = 0) sufiks = StringConenate (akhiran, s, Shift Interval);
jika (GMTShift! = 0) sufiks = StringConenate (akhiran, gram, GMTSh ift);
jika (OmitDigit! = 0) sufiks = StringConenate (akhiran, o*, OmitDigit *);
MySymbol = Symbol () _ akhiran;
jika (StringLen (MySymbol) gt; 11)
MySymbol = StringConenate (StringSubstr (MySy mbol, 0,11-StringLen (akhiran)), akhiran);
//penilaian yang dilindungi untuk PeriodMultiplier.
Jika (PeriodMultiplier lt; = 1 sufiks ==)
//hanya output fail CSV
Multiplier Tempoh = 1;
Fail CSV Keluaran = 2;
NewPeriod = Tempoh () * PeriodMultiplier;
jika (OpenHistoryFile () lt; 0) kembali (-1);
WriteHistoryHeader ();
UpdateHistoryFile (Bar-1, benar);
UpdateChartWindow ();
pulangan (0);
tidak sah deinit ()
//Tutup fail fail
jika (FileHandle gt; = 0)
FileClose (FileHandle);
FileHandle = -1;
jika (CSVHandle gt; = 0)
FileClose (CSVHandle);
CSVHandle = -1;
int OpenHistoryFile ()
nama siri;
name = MySymbol NewPeriod;
jika (OutputCSVFile! = OUTPUT_CSV_ONLY) FILE_WRITE
jika (OutputCSVFile! = OUTPUT_HST_ONLY) FILE_WRITE
pulangan (0);
int WriteHistoryHeader ()
s_copyright;
int i_digits = Digits-OmitDigit;
int i_unused [13] = 0;
int version = 400;
jika (FileHandle lt; 0) kembali (-1);
c_copyright = (C) dilarang 2003, MetaQuotes Software Corp .;
FileWriteInteger (FileHandle, versi, LONG_VALUE);
FileWriteString (FileHandle, c_copyright, 64);
FileWriteString (FileHandle, MySymbol, 12);
FileWriteInteger (FileHandle, NewPeriod, LONG_VALUE);
FileWriteInteger (FileHandle, i_digits, LONG_VALUE);
FileWriteInteger (FileHandle, 0, LONG_VALUE);/timesign
FileWriteInteger (FileHandle, 0, LONG_VALUE);/last_sync
FileWriteArray (FileHandle, i_unused, 0, ArraySize (i_unused));
pulangan (0);
statik double d_open, d_low, d_high, d_close, d_volume;
int statik i_time;
tidak sah WriteHistoryData ()
{
jika (FileHandle gt; = 0) {
FileWriteInteger (FileHandle, i_time GMTShift * 60 * 60, LONG_VALUE);
FileWriteDouble (FileHandle, d_open, DOUBLE_VALUE);
FileWriteDouble (FileHandle, D_low, DOUBLE_VALUE);
FileWriteDouble (FileHandle, d_high, DOUBLE_VALUE);
FileWriteDouble (FileHandle, d_close, DOUBLE_VALUE);
FileWriteDouble (FileHandle, d_volume, DOUBLE_VALUE);
}
jika (CSVHandle gt; = 0)
int i_digits = Digits-OmitDigit;
FileWrite (CSVHandle,
TimeToStr (i_time, TIME_DATE),
TimeToStr (i_time, TIME_MINUTES),
DoubleToStr (d_open, i_digits),
DoubleToStr (d_high, i_digits),
DoubleToStr (d_low, i_digits),
DoubleToStr (d_close, i_digits),
d_volume);
}
int UpdateHistoryFile (int start_pos, bool init = false)
int statik last_fpos, csv_fpos;
int I, ps;
//jika (FileHandle lt; 0) kembali (-1);
//menormalkan masa lapang
ps = NewPeriod * 60;
i_time = (Masa [start_pos] -ShiftBase * ShiftTiming)ps;
i_time = i_time * ps ShiftBase * ShiftTiming;
jika (init)
/masa awal, data init
d_open = Buka [start_pos];
d_low = Rendah [start_pos];
d_high = Tinggi [start_pos];
d_close = Tutup [start_pos];
d_volume = Volume [start_pos];
I = start_pos - 1;
jika (FileHandle gt; = 0) last_fpos = FileTell (FileHandle);
jika (CSVHandle gt; = 0) csv_fpos = FileTell (CSVHandle);
lain
Id = start_pos;
jika (FileHandle gt; = 0) FileSeek (FileHandle, last_fpos, SEEK_ SET);
jika (CSVHandle gt; = 0) FileSeek (CSVHandle, csv_fpos, SEEK_SET);
jika (lt; 0) pulangan (-1);
int cnt = 0;
int lastBarTime;
/pemprosesan bar
sementara (saya gt; = 0)
LastBarTime = Masa [I];
//bar baru
jika (LastBarTime gt; = i_time ps)
//tulis maklumat pub
WriteHistoryData ();
cnt ;
i_time = (LastBarTime-ShiftBase * ShiftTiming)ps;
i_time = i_time * ps ShiftBase * ShiftTiming;
d_open = Buka [I];
d_low = Rendah [I];
d_high = Tinggi [I];
d_close = Tutup [I];
d_volume = Volum [I];
lain
//tiada bar baru
d_volume = Volum [I];
jika (Rendah [I] lt; d_non) d_low = Rendah [I];
jika (Tinggi [saya] mendapat; d'tinggi) d'high = Tinggi [I];
d_close = Tutup [I];
Saya -
//album last_fpos sebelum menyusun pub terakhir.
Jika (FileHandle gt; = 0) last_fpos = FileTell (FileHandle);
jika (CSVHandle gt; = 0) csv_fpos = FileTell (CSVHandle);
WriteHistoryData ();
cnt ;
d_volume - = Volume [0];
//memadamkan data yang ditulis
jika (FileHandle gt; = 0) FileFlush (FileHandle);
jika (CSVHandle gt; = 0) FileFlush (CSVHandle);
kembali (cnt);
int UpdateChartWindow ()
int statik hwnd = 0;
jika (FileHandle lt; 0)
//tanpa file HST dibuka, tidak perlu upgrade.
Pulangan (-1);
jika (hwnd == 0)
//cuba mengesan tetingkap carta untuk mengemaskini
hwnd = WindowHandle (MySymbol, NewPeriod);
jika (hwnd! = 0)
jika (IsDllsAllowed () == false)
//Panggilan DLL mesti dibenarkan
DebugMsg (panggilan Dll perlu dibenarkan);
pulangan (-1);
harus (PostMessageA (hwnd, WM_COMMAND, CHART _CMD_UPDATE_DATA, 0) == 0)
//PostMessage gagal, tetingkap carta ditutup
hwnd = 0;
lain
//Kemenangan PostMessage
pulangan (0);
//tetingkap tidak dijumpai atau PostMessage gagal
pulangan (-1);
/*
int PerfCheck (mulakan mulakan)
int statik StartTime = 0;
statik int Indeks = 0;
jika (Mula)
StartTime = GetTickCount ();
Indeks = 0;
hasil (Mula Masa);
Indeks ;
int diff = GetTickCount () - StartTime;
Pemberitahuan (Masa yang digunakan [ Index ]: diff);
StartTime = GetTickCount ();
hasil (diff);
*
int static LastStartTime = 0;
int statik LastEndTime = 0;
int statik LastBarCount = 0;
void reinit ()
deinit ();
di dalamnya();
LastStartTime = Masa [Bar-1];
LastEndTime = Timing [0];
LastBarCount = Bar;
bool IsDataChanged ()
LastLow! = Rendah [0]
int CheckNewData ()
Masa [I]! = LastEndTime)
DebugMsg (Masa tamat TimeToStr (LastEndTime) tidak dijumpai);
reinit ();
pulangan (-1);
cnt = Bar - I;
jika (cnt! = LastBarCount)
DebugMsg (Data dimuat, cnt ialah cnt LastBarCount adalah LastBarCount);
reinit ();
pulangan (-1);
//tidak ada data baru yang dimuatkan, disatukan kembali dengan kedudukan LastEndTime.
LastBarCount = Bar;
LastEndTime = Timing [0];
pulangan (Id);
// ------------------------------------ ----------- -------------------
//| fungsi permulaan program |
// ------------------------------------ ----------- -------------------
int start ()
int statik last_time = 0;
jika (! Diaktifkan) pulangan (0);
//sentiasa kemas kini atau kemas kini sejurus selepas selang waktu tertentu
jika (UpdateInterval! = 0)
int cur_time;
cur_time = GetTickCount ();
jika (MathAbs (cur_time - last_time) lt; UpdateInterval)
pulangan (0);
last_time = cur_time;
//if (Debug) PerfCheck (true);
int n = CheckNewData ();
//if (Debug) PerfCheck (false);
jika (n lt; 0) kembali (0);
//Sejarah kemas kini dengan maklumat baru
UpdateHistoryFile (n);
//tetingkap carta segar semula
UpdateChartWindow ();
//if (Debug) PerfCheck (false);
pulangan (0);
Penunjuk lampiran:
Fail yang dilampirkan
https://www.justgetforex.com/attachm...9574793598.mq460 KB | 0 muat turun