Görünüşe göre terminal geçmişi indirmeye devam ediyor - buna göre gösterge sürekli olarak yeniden hesaplanıyor. Veya başka bir seçenek: terminalde, çizelgede görüntülenecek ÇOK fazla sayıda çubuk var ve bilgisayarınız ÇOK
Yardım için teşekkürler!
Başka bir tarih seçerseniz, hesaplama hemen gerçekleşir. İlk test sırasında fiyatta bir boşluk vardı, bazı fiyatların atlanmış olması mümkündür - büyük olasılıkla sorun budur.
Merhaba! MT5 "Grid Builder" için bir gösterge var,fiyat artışlarıylayatay çizgiler çiziyor. Örneğin 100p, 200p vb. seçebilirsiniz. Ve belirli bir adımla yukarı ve aşağı yatay bir ızgara oluşturulur. Ancak bir sorunu var, örneğin H4 zaman diliminde grafik yatay seviyelerimi çizdiğimde (terminaldeki çizim araçlarından yatay çizgiler koyuyorum) ve başka bir zaman dilimine geçtiğimde tüm satırlarım siliniyor. Ve göstergenin sadece yatay seviyeleri kalır. Kodumdaki bu hatayı nasıl düzeltebilirim? Böylece yatay seviyelerim asla kaldırılmaz. İşte gösterge kodu. (Bu soru daha önce başka bir başlıkta paylaşılmıştı ama henüz cevap yok)
//+------------------------------------------------------------------+//| GridBuilder.mq5 |//| Copyright 2015, AM2 |//| https://www.forexsystems.biz |//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link "https://www.forexsystems.biz"
#property version "1.00"
#property indicator_chart_window
//---- для расчёта и отрисовки индикатора использовано ноль буферов
#property indicator_buffers 0//---- использовано всего ноль графических построений
#property indicator_plots 0//--- входные параметры
input int count = 50 ; //количество линий вверх вниз от цены
input int step = 333 ; //шаг линий
input double pr = 1.4622 ; //цена от которой пляшем//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int OnInit()
{
//--- indicator buffers mapping
ObjectsDeleteAll( 0 , 0 ,OBJ_HLINE);
//---return (INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit( constint reason)
{
Comment( "" );
ObjectsDeleteAll( 0 , 0 ,OBJ_HLINE);
}
//+------------------------------------------------------------------+ //| Создает горизонтальную линию | //+------------------------------------------------------------------+ bool HLine( conststring name= "HLine" , double price= 0 )
{
//--- создадим горизонтальную линию if (!ObjectCreate( 0 ,name,OBJ_HLINE, 0 , 0 ,price))
{
Print(__FUNCTION__,
": не удалось создать горизонтальную линию! Код ошибки = " ,GetLastError());
return ( false );
}
//--- установим цвет линии
ObjectSetInteger( 0 ,name,OBJPROP_COLOR,clrGreen);
ObjectSetInteger( 0 ,name,OBJPROP_WIDTH, 1 );
return ( true );
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+int OnCalculate( constint rates_total,
constint prev_calculated,
const datetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
double price=pr;
//--- создадим горизонтальную линию for ( int i= 0 ;i<=count;i++)
{
HLine( "HLine" +( string )i,price+step*i*_Point);
HLine( "HLine" +( string )(i+count+ 1 ),price-step*i*_Point);
}
//--- return value of prev_calculated for next callreturn (rates_total);
}
//+------------------------------------------------------------------+
При создании графического объекта функцией ObjectCreate() необходимо указать тип создаваемого объекта, который может принимать одно из значений перечисления ENUM_OBJECT. Дальнейшие уточнения свойств созданного объекта возможно с помощью функций по работе с графическими объектами.
Merhaba! MT5 "Grid Builder" için bir gösterge var,fiyat artışlarıylayatay çizgiler çiziyor. Örneğin 100p, 200p vb. seçebilirsiniz. Ve belirli bir adımla yukarı ve aşağı yatay bir ızgara oluşturulur. Ancak bir sorunu var, örneğin H4 zaman diliminde grafik yatay seviyelerimi çizdiğimde (terminaldeki çizim araçlarından yatay çizgiler koyuyorum) ve başka bir zaman dilimine geçtiğimde tüm satırlarım siliniyor. Ve göstergenin sadece yatay seviyeleri kalır. Kodumdaki bu hatayı nasıl düzeltebilirim? Böylece yatay seviyelerim asla kaldırılmaz. İşte gösterge kodu. (Bu soru daha önce başka bir başlıkta paylaşılmıştı ama henüz cevap yok)
[in] Префикс, по которому будут удалены все объекты, чьи имена начинаются с данного набора символов. Префикс можно указывать как 'name' или 'name*' – оба варианта работают одинаково. Если в качестве префикса указана пустая строка, то будут удалены объекты с любым именем. Функция использует синхронный вызов – это...
Mevcut. Sadece üssün konumuna dikkat edin. Dosyalarla aynı şekilde oluşturulurlar.
#define DB_NAME "OHLC_DB"int db_handle;
string TableName;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit (){
db_handle = DatabaseOpen (DB_NAME, DATABASE_OPEN_READWRITE | DATABASE_OPEN_CREATE );
if (db_handle != INVALID_HANDLE ){
Print ( StringFormat ( "Database %s was opened" , DB_NAME));
TableName = Symbol () + "_" + enumTimeFrameToString( Period ());
if ( DatabaseTableExists (db_handle, TableName)){
Print ( StringFormat ( "Table %s is exist" , TableName));
} else {
if ( DatabaseExecute (db_handle, "CREATE TABLE " + TableName + "(""TIME TEXT PRIMARY KEY NOT NULL,""OPEN REAL NOT NULL,""HIGH REAL NOT NULL,""LOW REAL NOT NULL,""CLOSE REAL NOT NULL );" )){
Print ( StringFormat ( "Table %s was created" , TableName));
string time = "'" + TimeToString ( iTime ( Symbol (), PERIOD_CURRENT , 0 )) + "'" ;
double open = iOpen ( Symbol (), PERIOD_CURRENT , 0 );
double high = iHigh ( Symbol (), PERIOD_CURRENT , 0 );
double low = iLow ( Symbol (), PERIOD_CURRENT , 0 );
double close = iClose ( Symbol (), PERIOD_CURRENT , 0 );
if (! DatabaseExecute (db_handle, "INSERT INTO " + TableName + " (TIME,OPEN,HIGH,LOW,CLOSE) ""VALUES (" + StringFormat ( "%s,%.5f,%.5f,%.5f,%.5f" , time, open, high, low, close) + ");" )){
Print ( "Table: " , TableName, " insert failed with code " , GetLastError ());
DatabaseClose (db_handle);
return ( INIT_FAILED );
} elsePrint ( "New table started:" );
} else {
Print ( StringFormat ( "Could not create %s table. Error is: %d" , TableName, GetLastError ()));
DatabaseClose (db_handle);
return ( INIT_FAILED );
}
}
return ( INIT_SUCCEEDED );
} else {
Print ( "Could not open db. Error is: " , GetLastError ());
return ( INIT_FAILED );
}
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit ( constint reason){
DatabaseClose (db_handle);
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick (){
string time = "'" + TimeToString ( iTime ( Symbol (), PERIOD_CURRENT , 0 )) + "'" ;
double open = iOpen ( Symbol (), PERIOD_CURRENT , 0 );
double high = iHigh ( Symbol (), PERIOD_CURRENT , 0 );
double low = iLow ( Symbol (), PERIOD_CURRENT , 0 );
double close = iClose ( Symbol (), PERIOD_CURRENT , 0 );
if (! DatabaseExecute (db_handle, "INSERT INTO " + TableName + " (TIME,OPEN,HIGH,LOW,CLOSE) ""VALUES (" + StringFormat ( "%s,%.5f,%.5f,%.5f,%.5f" , time, open, high, low, close) + ");" )){
Print ( "Table: " , TableName, " insert failed with code " , GetLastError ());
DatabaseClose (db_handle);
}
}
//+------------------------------------------------------------------+string enumTimeFrameToString( ENUM_TIMEFRAMES frame){
switch (frame){
casePERIOD_M1 : return"M1" ;
casePERIOD_M2 : return"M2" ;
casePERIOD_M3 : return"M3" ;
casePERIOD_M4 : return"M4" ;
casePERIOD_M5 : return"M5" ;
casePERIOD_M6 : return"M6" ;
casePERIOD_M10 : return"M10" ;
casePERIOD_M12 : return"M12" ;
casePERIOD_M15 : return"M15" ;
casePERIOD_M20 : return"M20" ;
casePERIOD_M30 : return"M30" ;
casePERIOD_H1 : return"H1" ;
casePERIOD_H2 : return"H2" ;
casePERIOD_H3 : return"H3" ;
casePERIOD_H4 : return"H4" ;
casePERIOD_H6 : return"H6" ;
casePERIOD_H8 : return"H8" ;
casePERIOD_D1 : return"D1" ;
casePERIOD_W1 : return"W1" ;
default : return"MN1" ;
}
}
İşte kodum. Başlatmada, tabloda bir giriş oluşturur. OnTick gövdesinde, aynı PRIMARY KEY ile bir kayıt eklemeye çalıştığım için hemen bir hata döndürmesi gerekir ve bundan sonra veritabanı hemen kapatılır. Ama aynı zamanda, açtığımda, en azından ilk girişi görmeliydim, ancak test cihazında çalıştırdığımda orada değil. Ve masa bile oluşturulmadı. Ve sadece terminalde çalıştırırsam, her şey yolunda. İlk giriştir.
İşte kodum. Başlatmada, tabloda bir giriş oluşturur. OnTick gövdesinde, aynı PRIMARY KEY ile bir kayıt eklemeye çalıştığım için hemen bir hata döndürmesi gerekir ve bundan sonra veritabanı hemen kapatılır. Ama aynı zamanda, açtığımda, en azından ilk girişi görmeliydim, ancak test cihazında çalıştırdığımda orada değil. Ve masa bile oluşturulmadı. Ve sadece terminalde çalıştırırsam, her şey yolunda. İlk giriştir.
Test cihazının ve terminalin kendisinin farklı enkarnasyonlar olduğuna bir kez daha ikna oldum...
HistorySelect(xxx,TimeCurrent()) miss the latest history order / deal sometimes. Now you have to use HistorySelect(xxx,TimeCurrent()+1) To get a more accurate result.
Uzun zamandır TimeCurrent() öğesine bir gün eklenmesi tavsiye ediliyor. Az önce, tamamen doğru olmayan kodunuza yanıt olarak, terminal size tavsiyede bulunuyor.
Görünüşe göre terminal geçmişi indirmeye devam ediyor - buna göre gösterge sürekli olarak yeniden hesaplanıyor. Veya başka bir seçenek: terminalde, çizelgede görüntülenecek ÇOK fazla sayıda çubuk var ve bilgisayarınız ÇOK
Yardım için teşekkürler!
Başka bir tarih seçerseniz, hesaplama hemen gerçekleşir. İlk test sırasında fiyatta bir boşluk vardı, bazı fiyatların atlanmış olması mümkündür - büyük olasılıkla sorun budur.
Merhaba! MT5 "Grid Builder" için bir gösterge var, fiyat artışlarıyla yatay çizgiler çiziyor. Örneğin 100p, 200p vb. seçebilirsiniz. Ve belirli bir adımla yukarı ve aşağı yatay bir ızgara oluşturulur. Ancak bir sorunu var, örneğin H4 zaman diliminde grafik yatay seviyelerimi çizdiğimde (terminaldeki çizim araçlarından yatay çizgiler koyuyorum) ve başka bir zaman dilimine geçtiğimde tüm satırlarım siliniyor. Ve göstergenin sadece yatay seviyeleri kalır. Kodumdaki bu hatayı nasıl düzeltebilirim? Böylece yatay seviyelerim asla kaldırılmaz. İşte gösterge kodu. (Bu soru daha önce başka bir başlıkta paylaşılmıştı ama henüz cevap yok)
Merhaba! MT5 "Grid Builder" için bir gösterge var, fiyat artışlarıyla yatay çizgiler çiziyor. Örneğin 100p, 200p vb. seçebilirsiniz. Ve belirli bir adımla yukarı ve aşağı yatay bir ızgara oluşturulur. Ancak bir sorunu var, örneğin H4 zaman diliminde grafik yatay seviyelerimi çizdiğimde (terminaldeki çizim araçlarından yatay çizgiler koyuyorum) ve başka bir zaman dilimine geçtiğimde tüm satırlarım siliniyor. Ve göstergenin sadece yatay seviyeleri kalır. Kodumdaki bu hatayı nasıl düzeltebilirim? Böylece yatay seviyelerim asla kaldırılmaz. İşte gösterge kodu. (Bu soru daha önce başka bir başlıkta paylaşılmıştı ama henüz cevap yok)
Bu koda dikkat edin:
Özellikle, ObjectsDeleteAll() hakkında bilgi edinin - nasıl düzeltileceğinin hem nedeni hem de cevabı vardır.
Bu koda dikkat edin:
Özellikle, ObjectsDeleteAll() hakkında bilgi edinin - nasıl düzeltileceğinin hem nedeni hem de cevabı vardır.
Teşekkürler!!! Anlaşıldı, artık kaldırmadan çalışıyor.
SQLite veritabanı ile işlemler test cihazından alınabilir mi? Veri eklemek ve değiştirmekten bahsediyorum.
Mevcut. Sadece üssün konumuna dikkat edin. Dosyalarla aynı şekilde oluşturulurlar.
Mevcut. Sadece üssün konumuna dikkat edin. Dosyalarla aynı şekilde oluşturulurlar.
İşte kodum. Başlatmada, tabloda bir giriş oluşturur. OnTick gövdesinde, aynı PRIMARY KEY ile bir kayıt eklemeye çalıştığım için hemen bir hata döndürmesi gerekir ve bundan sonra veritabanı hemen kapatılır. Ama aynı zamanda, açtığımda, en azından ilk girişi görmeliydim, ancak test cihazında çalıştırdığımda orada değil. Ve masa bile oluşturulmadı. Ve sadece terminalde çalıştırırsam, her şey yolunda. İlk giriştir.
İşte kodum. Başlatmada, tabloda bir giriş oluşturur. OnTick gövdesinde, aynı PRIMARY KEY ile bir kayıt eklemeye çalıştığım için hemen bir hata döndürmesi gerekir ve bundan sonra veritabanı hemen kapatılır. Ama aynı zamanda, açtığımda, en azından ilk girişi görmeliydim, ancak test cihazında çalıştırdığımda orada değil. Ve masa bile oluşturulmadı. Ve sadece terminalde çalıştırırsam, her şey yolunda. İlk giriştir.
Test cihazının ve terminalin kendisinin farklı enkarnasyonlar olduğuna bir kez daha ikna oldum...
Uzun zamandır TimeCurrent() öğesine bir gün eklenmesi tavsiye ediliyor. Az önce, tamamen doğru olmayan kodunuza yanıt olarak, terminal size tavsiyede bulunuyor.