Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 353

 
_new-rena :

bu (aşağıda) çalışmıyor, explorer'a F_Path yazdım, enter'a tıkladım, dosya açılıyor... WinApi'deki bilgiler böyle mi görünüyor?

Yazarken ve okurken FILE_COMMON bayrağının kullanılmasını kim engeller? Dosya, sistemde kurulu tüm terminaller tarafından kullanılabilir olacaktır. Tüm terminallerin paylaşımlı klasöründe yer alacaktır.

ME Dosyası --> Paylaşılan Veri Klasörünü Aç

 
artmedia70 :

Yazarken ve okurken FILE_COMMON bayrağının kullanılmasını kim engeller? Dosya, sistemde kurulu tüm terminaller tarafından kullanılabilir olacaktır. Tüm terminallerin paylaşımlı klasöründe yer alacaktır.

ME Dosyası --> Paylaşılan Veri Klasörünü Aç

Teşekkürler (!!!), Deneyeceğim.
 

Merhaba, parametrelerle ticaret talebi oluştururken böyle bir sorunla karşılaşan var mı:

bu parametreleri ayarlarsanız:

mrequest.action=TİCARET_ACTION_DEAL;
mrequest.type_filling=ORDER_FILLING_FOK;

mrequest.type=ORDER_TYPE_BUY;

terminal, mrequest.type_filling=ORDER_FILLING_RETURN belirtirsem, geçersiz bir mrequest.type_filling yöntemi ( sipariş yürütme politikası ) belirttiğimi bildiriyor; sonra sipariş açılır, ancak programlı olarak kapatmak imkansızdır, terminal geçersiz bir yöntemin kullanıldığını bildirir. BCS Forex sunucusunda Expert Advisor'ı çalıştırıyorum, diğer sunucularda her şey yolunda. Belirli bir komisyoncu için ticaret robotları geliştirirken kullanılabilecek bir yürütme politikası yazabilen var mı? Teşekkür ederim.
 

Uyarı işlevine sahip bir mq4 göstergesi vardır.

Örneğin:

 //+------------------------------------------------------------------+
//|                                                    RSI-Alert.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link        "http://www.metaquotes.net/"

#property indicator_separate_window
//#property indicator_minimum 0
//#property indicator_maximum 100
#property indicator_buffers 3
#property indicator_color1 LightSeaGreen
#property indicator_color2 CLR_NONE
#property indicator_color3 CLR_NONE
#property indicator_width1 1
#property indicator_width2 1
#property indicator_width3 1
#property indicator_style1 STYLE_SOLID
#property indicator_style2 STYLE_DOT
#property indicator_style3 STYLE_DOT
//---- input parameters
extern int RSIPeriod= 48 ;
extern int ApplyTo= 0 ;
extern bool AlertMode= true ;
extern int OverBought= 0 ;
extern int OverSold= 0 ;
//---- buffers
double RSIBuffer[];
double RSIOBBuffer[];
double RSIOSBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
//---- indicator lines
   SetIndexStyle( 0 , DRAW_LINE );
   SetIndexBuffer ( 0 ,RSIBuffer);
   SetIndexStyle( 1 , DRAW_LINE );
   SetIndexBuffer ( 1 ,RSIOBBuffer);
   SetIndexStyle( 2 , DRAW_LINE );
   SetIndexBuffer ( 2 ,RSIOSBuffer);
//---- name for DataWindow and indicator subwindow label
   short_name= "RSI-Alert(" +RSIPeriod+ ")" ;
   IndicatorShortName(short_name);
   SetIndexLabel( 0 ,short_name);
   SetIndexLabel( 1 , "OverBought" );
   SetIndexLabel( 2 , "OverSold" );
//----
   SetIndexDrawBegin( 0 ,RSIPeriod);
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Relative Strength Index                                          |
//+------------------------------------------------------------------+
int start()
  {
   int     i,counted_bars=IndicatorCounted();
//----
   if ( Bars <=RSIPeriod) return ( 0 );
//----
   i= Bars -RSIPeriod- 1 ;
   if (counted_bars>=RSIPeriod) i= Bars -counted_bars- 1 ;
   while (i>= 0 )
   {
      RSIBuffer[i]= iForce ( NULL , 0 ,RSIPeriod, 1 , 0 ,i);
      RSIOBBuffer[i]=OverBought;
      RSIOSBuffer[i]=OverSold;
      i--;
   }
   
   if (AlertMode)
   {
       if (RSIBuffer[ 1 ]<OverBought && RSIBuffer[ 0 ]>=OverBought)
         Alert ( "RSI = " + RSIBuffer[i]+ ", Sell." );
       else if (RSIBuffer[ 1 ]>OverSold && RSIBuffer[ 0 ]<=OverSold)
         Alert ( "RSI = " + RSIBuffer[i]+ ", Buy." );
   }
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
Alt pencerenin sol üst köşesinde ( göstergenin adı ve parametrelerinin genellikle görüntülendiği yer) veya başka bir şekilde uyarının açık olup olmadığını gösterecek şekilde nasıl yapabilirim ( extern bool AlertMode= true ;) yoksa kapalı mı?
 
Nilog :

Uyarı işlevine sahip bir mq4 göstergesi vardır.

Örneğin:

Alt pencerenin sol üst köşesinde ( göstergenin adı ve parametrelerinin genellikle görüntülendiği yer) veya başka bir şekilde uyarının açık olup olmadığını gösterecek şekilde nasıl yapabilirim ( extern bool AlertMode= true ;) yoksa kapalı mı?
Örneğin nesne olarak çıktı metni.
 

Belgeler şunları söylüyor:

При тестировании в эксперте можно обрабатывать пользовательские события с помощью функции OnChartEvent() , но в индикаторах эта функция в тестере не вызывается. Даже если индикатор имеет обработчик OnChartEvent() и этот индикатор используется в тестируемом эксперте, то сам индикатор не будет получать никаких пользовательских событий.

Şu anda, bu ifade ilgili değildir - göstergelerde bu işlev test cihazında çağrılır, en az bir gösterge, test cihazında başka bir gösterge tarafından oluşturulan olayları alabilir.

Sorun şu ki, bu işleve bir çağrı alındığında, göstergenin küresel düzeyde bildirilen değişkenlerde depolanan verilere erişimi yoktur ve bunun tersi de geçerlidir - bu işlevde yapılan tüm değişiklikler küresel erişim düzeyinin değişkenlerine kaydedilmez. .

Örnekler:

1. Nesne, genel düzeyde bildirilir ve OnInit işlevinde başlatılır. OnCalculate işlevinden erişilebilir, ancak OnChartEvent işlevinde bir hata mesajı alıyoruz - geçersiz işaretçi

2. Bir değişkenin içeriğini kaydeden bir fonksiyon vardır (değişken global düzeyde bildirilir). OnCalculate'den bu fonksiyonu çağırırken beklenen değeri alıyoruz, aynı fonksiyonu OnChartEvent'ten çağırırken saçma sapan alıyoruz.

 

Güzel gün!

Olayları, özellikle bir göstergedeki OnChartEvent() işlevini kullanırken bir sorunla karşılaştım. Bir Expert Advisor'da kullanırken herhangi bir sorun olmadıysa, göstergedeki bir olay üzerinde doğru şekilde çalışmak mümkün değildir. Yani olay gelir ama üzerinde var olan alanları değiştirmez. Misal:

//------------------------------------------------ --------------------------------------------------
int k;
int OnInit ()
{
k = 0;
ihandleDE = iCustom(_Symbol, _Period, "DrawExtremums");
//< ... >
dönüş(INIT_SUCCESSED);
}

int OnCalculate (const int oranları_toplam,
const int önceki_hesaplanmış,
const tarihsaat &saat[],
const double &aç[],
const çift &yüksek[],
const çift &düşük[],
const double &kapat[],
const uzun &tick_volume[],
const uzun &hacim[],
const int &spread[])
{
Print("OnCalculate() Üzerinde: k =", k);
//< ... >
dönüş(oranlar_toplam);

}

void OnChartEvent (const int id,
const uzun &lparam,
const double &dparam,
const string &sparam)
{
string nameEv = "EXTR_UP";
if (sparam == isimEv)
{
Print("OnChartEvent() Üzerinde: k = ", k);
k++;

}

}

//------------------------------------------------ --------------------------------------------------

Sonuç olarak şunları elde ederiz:

"OnCalculate()'de: k = 0" - her zaman.

"OnChartEvent() On: k = 0,...,123332" - 0'dan ...'a kadar sayar

Bu nasıl olabilir ve neden?!? Bu bir şekilde düzeltilebilir mi? Birisi anlarsa, cevap için çok minnettar olurum.

Not: Bu tür adaletsizlik yalnızca strateji test cihazında gerçekleşir, gerçek zamanlı olarak her şey düzgün çalışır.

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
dariamap :

Güzel gün!

Olayları, özellikle bir göstergedeki OnChartEvent() işlevini kullanırken bir sorunla karşılaştım. Bir Expert Advisor'da kullanırken herhangi bir sorun olmadıysa, göstergedeki bir olay üzerinde doğru şekilde çalışmak mümkün değildir. Yani olay gelir ama üzerinde var olan alanları değiştirmez. Misal:

//------------------------------------------------ --------------------------------------------------
int k;
int OnInit ()
{
k = 0;
ihandleDE = iCustom(_Symbol, _Period, "DrawExtremums");
//< ... >
dönüş(INIT_SUCCESSED);
}

int OnCalculate (const int oranları_toplam,
const int önceki_hesaplanmış,
const tarihsaat &saat[],
const double &aç[],
const çift &yüksek[],
const çift &düşük[],
const double &kapat[],
const uzun &tick_volume[],
const uzun &hacim[],
const int &spread[])
{
Print("OnCalculate() Üzerinde: k =", k);
//< ... >
dönüş(oranlar_toplam);

}

void OnChartEvent (const int id,
const uzun &lparam,
const double &dparam,
const string &sparam)
{
string nameEv = "EXTR_UP";
if (sparam == isimEv)
{
Print("OnChartEvent() Üzerinde: k = ", k);
k++;

}

}

//------------------------------------------------ --------------------------------------------------

Sonuç olarak şunları elde ederiz:

"OnCalculate()'de: k = 0" - her zaman.

"OnChartEvent() On: k = 0,...,123332" - 0'dan ...'a kadar sayar

Bu nasıl olabilir ve neden?!? Bu bir şekilde düzeltilebilir mi? Birisi anlarsa, cevap için çok minnettar olurum.

Not: Bu tür adaletsizlik yalnızca strateji test cihazında gerçekleşir, gerçek zamanlı olarak her şey düzgün çalışır.

İyi akşamlar. Bir zamanlar hizmet masası buna oldukça kesin bir cevap verdi: terminal ve strateji test cihazı iki farklı programdır ve test cihazındaki ve terminaldeki danışmanların / göstergelerin çalışmaları önemli ölçüde farklılık gösterebilir. Genellikle terminalde çalışan test cihazında çalışmaz. Servis masasına yazın, kanıt sağlayın ve düzeltmelerine izin verin.
 
Tapochun :
İyi akşamlar. Bir zamanlar hizmet masası buna oldukça kesin bir cevap verdi: terminal ve strateji test cihazı iki farklı programdır ve test cihazındaki ve terminaldeki danışmanların / göstergelerin çalışmaları önemli ölçüde farklılık gösterebilir. Genellikle terminalde çalışan test cihazında çalışmaz. Servis masasına yazın, kanıt sağlayın ve düzeltmelerine izin verin.
Çok teşekkürler! benim sorunum olmadığına sevindim
 
extern string Symbol1= "EURUSD" ;
extern string Symbol2= "GBRUSD" ;

   double Sell1= iFractals (Symbol1, 240 ,MODE_UPPER, 2 );
   double Sell2= iFractals (Symbol2, 240 ,MODE_UPPER, 2 );
Sell1 ve Sell2 fraktallarını açarken aynı anda bir emir açılması için hangi komutu yazacağımı söyle