Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 147

 

EA, bir dosyadan veri dizisini şu şekilde okumalıdır: tarih tamsayı1 tamsayı2 tamsayı3 tamsayı4, bin dışında herhangi bir dosya türünden mümkündür.

dosyayı C:\Users\Mikhail\AppData\Roaming\MetaQuotes\Tester\1B9501BF48F2354A4685940A72752910\Agent-127.0.0.1-3000\MQL5\Files\qqq.scv klasörüne kopyalayın

bu klasörden kaldırıldı

işte kod


 int File()
{
int P= 0 ;

int filehandle= FileOpen ( "qqq.csv" , FILE_READ | FILE_CSV , "," ); 
if (filehandle!= INVALID_HANDLE ) 
     { 
     datetime d = FileReadDatetime (filehandle);
   int I= FileReadNumber (filehandle);
     FileClose (filehandle);
     Comment (d+ " " +I);
     }
     else { Comment ( "qqq.csv" );}
return P;

}

dosyanın test cihazı tarafından silinmeyeceği klasörün yolunu belirtebilir mi? Test sırasında tüm dosyaların bu klasörden silindiğini anlıyorum ancak programlı bir dosya oluştururken bu klasöre yerleştiriliyor

 
Mikhail Simakov :

EA, bir dosyadan veri dizisini şu şekilde okumalıdır: tarih tamsayı1 tamsayı2 tamsayı3 tamsayı4, bin dışında herhangi bir dosya türünden mümkündür.

dosyayı C:\Users\Mikhail\AppData\Roaming\MetaQuotes\Tester\1B9501BF48F2354A4685940A72752910\Agent-127.0.0.1-3000\MQL5\Files\qqq.scv klasörüne kopyalayın

bu klasörden kaldırıldı

işte kod

dosyanın test cihazı tarafından silinmeyeceği klasörün yolunu belirtebilir mi? Test sırasında tüm dosyaların bu klasörden silindiğini anlıyorum ancak programlı bir dosya oluştururken bu klasöre yerleştiriliyor

Belki de FileCopy'yi FILE_COMMON bayrağıyla kullanmalısınız. Yeni testler sıfırdan çalışır, bu bir aksaklık olabilir.

 
Konstantin Nikitin :

Belki de FileCopy'yi FILE_COMMON bayrağıyla kullanmalısınız. Yeni testler sıfırdan çalışır, bu bir aksaklık olabilir.

test sırasında bir klasöre kopyalanırsa dosyayı okuduğu ortaya çıkıyor)) şimdi ayırıcı ile ilgilenin

 

MQL4'te bir ticaret paneli yazmaya başladım ve işte paradoks. Her şey yolunda görünüyor, ancak TF'yi her değiştirdikten sonra, diğer göstergelerden gelen çizgiler ve metinler zaten panelimin üstüne çiziliyor.

Kontrol ettiğim şey şu: TF'yi değiştirirken OBJPROP_BACK parametresi = false. Yani, bu taraftan her şey yolunda.

Bu konuda herhangi bir fikriniz var mı?

not Nitekim, şimdi kontrol ettim, kaynak kodu (prototip olarak aldığım) aynı şekilde davranıyor. TF'yi değiştirdikten sonra, panelin üstüne sıradan çizgiler çizilir ve OOP kullanmayan göstergeler tarafından oluşturulur.
https://www.mql5.com/ru/code/19220
Infopanel
Infopanel
  • www.mql5.com
Пример создания простого и быстрого меню с поддержкой нескольких языков. В примере выводится информация о цене, времени до следующего бара, балансе счета, количестве ордеров. Данный пример можно использовать в качестве шаблона для создания своих разработок. Минус данного метода при добавлении, удалении или редактировании объектов необходимо...
 
Goya7 :

MQL4'te bir ticaret paneli yazmaya başladım ve işte paradoks. Her şey yolunda görünüyor, ancak TF'yi her değiştirdikten sonra, diğer göstergelerden gelen çizgiler ve metinler zaten panelimin üstüne çiziliyor.

Kontrol ettiğim şey şu: TF'yi değiştirirken OBJPROP_BACK parametresi = false. Yani, bu taraftan her şey yolunda.

Bu konuda herhangi bir fikriniz var mı?

not Nitekim, şimdi kontrol ettim, kaynak kodu (prototip olarak aldığım) aynı şekilde davranıyor. TF'yi değiştirdikten sonra, panelin üstüne sıradan çizgiler çizilir ve OOP kullanmayan göstergeler tarafından oluşturulur.
https://www.mql5.com/ru/code/19220

Zamanları değiştirirken, diğer programlar tarafından oluşturulan nesneler silinir ve hemen yenileri oluşturulur. Paneldeki nesneler silinmez, bu nedenle "eski" olurlar. Grafikte, ilke geçerlidir: "En son kim - o zirvede"

DeInit() içindeki paneldeki nesneleri silmek ve yeniden yenilerini oluşturmak da gereklidir.

 
Goya7 :

MQL4'te bir ticaret paneli yazmaya başladım ve işte paradoks. Her şey yolunda görünüyor, ancak TF'yi her değiştirdikten sonra, diğer göstergelerden gelen çizgiler ve metinler zaten panelimin üstüne çiziliyor.

Kontrol ettiğim şey şu: TF'yi değiştirirken OBJPROP_BACK parametresi = false. Yani, bu taraftan her şey yolunda.

Bu konuda herhangi bir fikriniz var mı?

not Nitekim, şimdi kontrol ettim, kaynak kodu (prototip olarak aldığım) aynı şekilde davranıyor. TF'yi değiştirdikten sonra, panelin üstüne sıradan çizgiler çizilir ve OOP kullanmayan göstergeler tarafından oluşturulur.
https://www.mql5.com/ru/code/19220
Vitaly Muzichenko :

Zamanları değiştirirken, diğer programlar tarafından oluşturulan nesneler silinir ve hemen yenileri oluşturulur. Paneldeki nesneler silinmez, bu nedenle "eski" olurlar. Grafikte, ilke geçerlidir: "En son kim - o zirvede"

DeInit() içindeki paneldeki nesneleri silmek ve yeniden yenilerini oluşturmak da gereklidir.

Etkinlikler'de yeni bir nesnenin oluşturulmasını yakalamak ve paneli yeniden çizmek daha iyidir

 
Vitaly Muzichenko :

Zamanları değiştirirken, diğer programlar tarafından oluşturulan nesneler silinir ve hemen yenileri oluşturulur. Paneldeki nesneler silinmez, bu nedenle "eski" olurlar. Grafikte, ilke geçerlidir: "En son kim - o zirvede"

DeInit() içindeki paneldeki nesneleri silmek ve yeniden yenilerini oluşturmak da gereklidir.

Düşünceler için teşekkürler. DeInit()'te elbette kaldırılırlar. TF'yi değiştirirken Init() prosedürü geçiyor, ancak bir şey bana panelin yeniden çizilmediğini söylüyor. Yani: Coğrafi olarak benimkinin olduğu yerde bulunan başka bir paneli denedim ve kurdum ve sonra kaldırdım. Benimki de kayboldu (TF değişikliğinden önce) - bu, yeniden çizilmediği anlamına gelir. (((
Bana nasıl yeniden çizileceğinden biraz daha bahseder misin?


Taras Slobodyanik :

Etkinlikler'de yeni bir nesnenin oluşturulmasını yakalamak ve paneli yeniden çizmek daha iyidir

Bana nasıl yapacağımı söyle, programcı olarak sadece yarım saatim var. :)
 
int OnInit ()
{
ChartSetInteger ( 0 , CHART_EVENT_OBJECT_CREATE , true );
}


void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
{
//событие создания нового объекта на чарте
if (id== CHARTEVENT_OBJECT_CREATE && StringFind (sparam, prefix, 0 )< 0 )
   {
   //удаляем панель и рисуем заново

   ChartRedraw ();
   }
}

not. Hatırladım - yine de oluşturulan nesnenin adını kendi nesneniz olmaması için kontrol etmeniz gerekiyor (önek - nesnelerinizin adlarının öneki).
veya bir ad yerine nesnelerin türünü karşılaştırın.

 
Vatandaşlar bana doğru yapıp yapmadığımı söylüyor !!! Danışmanın 30 veya 70 bölgesine girmediğinde işlem yapması ve girdiğinde işlem yapmaması gerekir!!! Yani doğru mu?

RSI3 = iRSI(_Symbol, _Period, RSIPPeriod, PRICE_CLOSE, 1);
RSI4 = iRSI(_Symbol, _Period, RSIPPeriod, PRICE_CLOSE, 2);

bool RSItf = RSI3 > 30 && 30 > RSI4;
if(RSItf == doğru)
{
}
başka
{
orderend (_Symbol, OP_SELL, lot, Bid, Slippage, 0, 0, NULL, Magic, 0, clrRed);
}
bool RSItf = RSI3 > 70 && 70> RSI4;
if(RSItf == doğru)
{
}
başka
{
orderend(_Symbol, OP_BUY, lot, Sor, Slippage, 0, 0, NULL, Magic, 0, clrBlue);
}
 
ponochka :
Vatandaşlar bana doğru yapıp yapmadığımı söylüyor !!! Danışmanın 30 veya 70 bölgesine girmediğinde işlem yapması ve girdiğinde işlem yapmaması gerekir!!! Yani doğru mu?

Bir şekilde, anladığım kadarıyla, ihtiyacın var

 int RSIPeriod = 0 , Slippage = 5 , Magic = 1234 ;
double lot = 0.1 ;

void OnStart ()
{
     double RSI3 = iRSI ( _Symbol , _Period , RSIPeriod, PRICE_CLOSE , 1 ),
            RSI4 = iRSI ( _Symbol , _Period , RSIPeriod, PRICE_CLOSE , 2 );
     int ticket = 0 ;
     
     if (RSI3 <= 30 && RSI4 <= 30 )
          ticket = OrderSend ( _Symbol , OP_SELL , lot, Bid , Slippage, 0 , 0 , NULL , Magic, 0 , clrRed );
     
     if (RSI3 >= 70 && RSI4 >= 70 )
          ticket = OrderSend ( _Symbol , OP_BUY , lot, Ask , Slippage, 0 , 0 , NULL , Magic, 0 , clrBlue );
}