Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 569

 
Merhaba! MQL4 çalışırken küçük bir soru ortaya çıktı. Görev, bu sitedeki ders kitabında yayınlanmıştır. İşte koşul: Görev 25. Aşağıdaki koşulları uygulayan bir program yazın: oran belirli bir seviyenin üzerine çıktıysa, o zaman seviyenin üzerindeki fazlalığın (100 puana kadar) kelimelerle belirtildiği bir mesaj verin; diğer durumlarda, oranın belirtilen seviyeyi aşmadığını bildirin.
Ve işte önerilen çözüm:
 //--------------------------------------------------------------------
extern double Level = 1.3200 ;                     // Заданный уровень 
string Text [ 101 ] ;                               // Объявление массива
//--------------------------------------------------------------------
int init ()                                        // Спец. ф-ия init()
   {                                              // Присвоение значений
   Text [ 1 ] = " один " ;             Text [ 15 ] = " пятнадцать " ;
   Text [ 2 ] = " два " ;             Text [ 16 ] = " шестнадцать " ;
   Text [ 3 ] = " три " ;             Text [ 17 ] = " семнадцать " ;
   Text [ 4 ] = " четыре " ;           Text [ 18 ] = " восемнадцать " ;
   Text [ 5 ] = " пять " ;             Text [ 19 ] = " девятнадцать " ;
   Text [ 6 ] = " шесть " ;           Text [ 20 ] = " двадцать " ;
   Text [ 7 ] = " семь " ;             Text [ 30 ] = " тридцать " ;
   Text [ 8 ] = " восемь " ;           Text [ 40 ] = " сорок " ;
   Text [ 9 ] = " девять " ;           Text [ 50 ] = " пятьдесят " ;
   Text [ 10 ] = " десять " ;         Text [ 60 ] = " шестьдесят " ;
   Text [ 11 ] = " одиннадцать " ;     Text [ 70 ] = " семьдесят " ;
   Text [ 12 ] = " двенадцать " ;     Text [ 80 ] = " восемьдесят " ;
   Text [ 13 ] = " тринадцать " ;     Text [ 90 ] = " девяносто " ;
   Text [ 14 ] = " четырнадцать " ;   Text [ 100 ] = " сто " ;
   // Вычисление значений
   for ( int i = 20 ; i <= 90 ; i = i + 10 )                  // Цикл по десяткам
     {
       for ( int j = 1 ; j <= 9 ; j ++ )                    // Цикл по единицам
         Text [ i + j ] = Text [ i ] + Text [ j ] ;           // Вычисление значения   
     }
   return ;                                     // Выход из init()
   }
//--------------------------------------------------------------------
int start ()                                      // Спец. ф-ия start()
   {
   int Delta = NormalizeDouble (( Bid - Level ) / Point , 0 ) ; // Превышение 
//--------------------------------------------------------------------
   if ( Delta >= 0 )                                  // Цена не выше уровня
     {
       Alert ( " Цена ниже уровня " ) ;                 // Сообщение
       return ;                                   // Выход из start()
     }
//--------------------------------------------------------------------
   if ( Delta < 100 )                                // Цена более 100
     {
       Alert ( " Более ста пунктов " ) ;               // Сообщение
       return ;                                   // Выход из start()
     }
//--------------------------------------------------------------------
   Alert ( " Плюс " , Text [ Delta ] , " pt. " ) ;             // Вывод на экран
   return ;                                       // Выход из start()
   }
//---------------------------------------------------------------------
По-моему в условных операторах неправильно проставлены знаки сравнения. Они должны быть с точностью до наоборот. Скажите прав ли я? И если нет, то почему так?  
 
Step :
Merhaba! MQL4 çalışırken küçük bir soru ortaya çıktı. Sorun bu sitedeki ders kitabında yayınlanmıştır. İşte koşul: Görev 25. Aşağıdaki koşulları uygulayan bir program yazın: oran belirli bir seviyenin üzerine çıktıysa, o zaman seviyenin üzerindeki fazlalığın (100 puana kadar) kelimelerle belirtildiği bir mesaj verin; diğer durumlarda, oranın belirtilen seviyeyi aşmadığını bildirin.
Ve işte önerilen çözüm:


Olası çözümler gösterilir. Öğrenmek için kullanışlıdır.

Başka seçenekler var. Başka hatalar var.

Kendine daha çok güven. Deney.

 
Step :
Merhaba! MQL4 çalışırken küçük bir soru ortaya çıktı. Görev, bu sitedeki ders kitabında yayınlanmıştır. İşte koşul: Görev 25. Aşağıdaki koşulları uygulayan bir program yazın: oran belirli bir seviyenin üzerine çıktıysa, o zaman seviyenin üzerindeki fazlalığın (100 puana kadar) kelimelerle belirtildiği bir mesaj verin; diğer durumlarda, oranın belirtilen seviyeyi aşmadığını bildirin.
Ve işte önerilen çözüm:


not

Spesifik olarak, bir diziyle çalışırken bu örneğin kullanışlılığı,

verilerin kelimelerle olası temsili,

NormalizeDouble işlevini ve önceden tanımlanmış değişken Point'i kullanarak.

Daha kolay bir hobi seçme fırsatı.

 

Görünüşe göre, sınıfın kendisinde doğrudan harici değişkenleri bildirmenin bir yolu yoktur. O halde seçenekler nelerdir? EA'nın kendisinde veya başka bir yerde, yalnızca bu sınıfı kullanırken ihtiyaç duyulan bu harici belirli değişkenleri bildirmek istemiyorsam. Anladığım kadarıyla, tek seçenek bu dış değişkenlerin bildirileceği bir içerme yapmak. Ve ayrıca içine bir sınıf ekleyin, değil mi?

Ardından, sınıfı çağırmak için, zaten sınıfı doğrudan içeren kapsayıcıyı dahil etmek gerekecektir. Böyle? Yoksa başka seçenekler var mı?

Bana pek iyi görünmüyor. Oluşturulacak bir sürü iç içe dosya-inklüzyon... İşte bu yüzden soru şu.

Yoksa normal bir kütüphanede olduğu gibi, bir sınıf bildirmeden önce harici değişkenleri bildirmek ve gerekli kütüphaneleri içe aktarmak hala mümkün mü? şöyle demek istiyorum:

 // Объявляем внешние переменные
extern type Var1;
extern type Var2;
extern type Var3;

// Подключаем требуемые библиотеки
//#include <LBase.mqh>
//+---
//#include <Logging.mqh>
#import "user32.dll"
     int GetAncestor;
     int PostMessageA;
#import
//
class CLogging
{
   protected :
 // защищенные данные
   public :
 // открытые данные
};
Bunu görmedim. Bu yüzden doğru yönde mi ilerliyorum diye merak ediyorum..
 
Gösterge kodunu Expert Advisor'a aktarıyorum, bir hata oluşuyor. kod bölümünde sıfır bölme

if(BullBear!="")
{
retXB=(zz[A4]-zz[B4])/(zz[A4]-zz[X4]+0.000001);
retAC=(zz[C4]-zz[B4])/(zz[A4]-zz[B4]+0.000001);



Bunları yorum aracılığıyla terminal ekranında global değişkenler olarak gösterdi. Sıfır yoktu, sadece negatif sayılar vardı. Sonra değişti

//---- indicator buffers
double zz[1500];
üzerinde

//---- indicator buffers
double zz[300];
her şey yerine oturdu, geri döndü. Hata yok! Sebep neydi? Inet henüz kapandı.
 
semargl988 :

Gösterge kodunu Expert Advisor'a aktarıyorum, bir hata oluşuyor. kod bölümünde sıfır bölme

...

Bunları yorum aracılığıyla terminal ekranında global değişkenler olarak gösterdi. Sıfır yoktu, sadece negatif sayılar vardı. Sonra değişti

...

üzerinde

...

her şey yerine oturdu, geri döndü. Hata yok! Sebep neydi? Inet henüz kapandı.

Ayrıca kesrin paydasında sıfırın geçilemediği " sıfır bölme " hatası aldım. Şimdi, bölmeden önce resmi bir tip kontrolü yapıyorum:

 if (znamenatel== 0 )
{
 какое-то действие;
}

ve hata gitti. Onlar. derleyiciye payda = 0 ise, programcı orada 0 olmadığından %100 emin olsa bile ne yapması gerektiği konusunda talimatlar verilmelidir.

 

Merhaba, lütfen bana kod konusunda yardım edin. Danışmanın temel bir şey yapmasına ihtiyacım var - dikey (yani kesinlikle zaman, fiyat değil) bir çizgiye yaklaşırken, yani burada 120'ye sahip olduğum belirtilen shi aralığı için açık pozisyonlar . Anladığım kadarıyla - 2 dakika. Çizginin rengi, alış mı yoksa satış mı olduğunu belirlemelidir. İnternette araştırdım ve yeniden yazdım, şu çıktı:

void OnTick()
{
int AllObject = ObjectsTotal();
for ( int i = 0; i < AllObject; i++)
{

string NameObj = ObjectName(i);
Colorrr = ObjectGet(NameObj, OBJPROP_COLOR);
Vremyaaa = (ObjectGet(NameObj, OBJPROP_TIME) - shi);
if(Vremyaaa == TimeLocal())
break;
}

int kolpos = 0;

if((Colorrr == Green)||(Colorrr == Aqua)){operacia = "OP_BUY";}
if((Colorrr == Red)||(Colorrr == Purple)){operacia = "OP_SELL";}
for (int pos = 0; pos < OrdersTotal(); pos++)
{
if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) == true)
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
kolpos++;
}
}
}
if(kolpos == 0)
{
if (iTime(NULL,0,1) == Vremyaaa)
{
int ticket = OrderSend(Symbol(), operacia, Lot, Bid, 10, 0, 0, "5", Magic, 0, col);
}

}

}

Yani nedense ticaret yapmıyor. Günlükte hata yok...
 
dmitriyriy666 :

Merhaba, lütfen bana kod konusunda yardım edin. Danışmanın temel bir şey yapmasına ihtiyacım var - dikey (yani kesinlikle zaman, fiyat değil) bir çizgiye yaklaşırken, yani burada 120'ye sahip olduğum belirtilen shi aralığı için açık pozisyonlar. Anladığım kadarıyla - 2 dakika. Çizginin rengi, alış mı yoksa satış mı olduğunu belirlemelidir. İnternette araştırdım ve yeniden yazdım, aşağıdaki çıktı:

void OnTick()
{
int AllObject = ObjectsTotal();
for ( int i = 0; i < AllObject; i++)
{

string NameObj = ObjectName(i);
Colorrr = ObjectGet(NameObj, OBJPROP_COLOR);
Vremyaaa = (ObjectGet(NameObj, OBJPROP_TIME) - shi);
if(Vremyaaa == TimeLocal() )
break;
}

int kolpos = 0;

if((Colorrr == Green)||(Colorrr == Aqua)){operacia = "OP_BUY" ;}
if((Colorrr == Red)||(Colorrr == Purple)){operacia = "OP_SELL" ;}
for (int pos = 0; pos < OrdersTotal(); pos++)
{
if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) == true)
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
kolpos++;
}
}
}
if(kolpos == 0)
{
if (iTime(NULL,0,1) == Vremyaaa)
{
int ticket = OrderSend(Symbol(), operacia, Lot, Bid, 10, 0, 0, "5", Magic, 0, col);
}

}

}

Yani nedense ticaret yapmıyor. Günlükte hata yok...

Bilgisayar saatiniz terminal saatiyle çakışıyorsa, TimeLocal () kullanabilirsiniz, ancak yine de TimeCurrent () 'den daha güvenilirdir .

Operacia değişkeninin türünü int olarak değiştirin ve OP_BUY ve OP_SELL tırnaklarını kaldırın

 
AlexeyVik :

Bilgisayar saatiniz terminal saatiyle çakışıyorsa, TimeLocal () kullanabilirsiniz, ancak yine de TimeCurrent () 'den daha güvenilirdir .

Operacia değişkeninin türünü int olarak değiştirin ve OP_BUY ve OP_SELL tırnaklarını kaldırın



Teşekkür ederim. TimeCurrent hakkında, bu kesin, benim zamanım sunucu zamanı ile örtüşmüyor. Düzelttim ama hala çalışmıyor... Günlüğe herhangi bir hata yazmıyor.


not önceki mesajımda, nedense boşluksuz kod eklendi. Ama doğru yerleştirilmiş tüm kaşlı ayraçları seviyorum.

 

MT4 - 625, baykuşları kitaplıkla test etmeye çalışırken test edenin mesajı:

2014.03.29 18:38:48.753 'C:\Program Files\Admiral1\MQL4\Libraries\ingLib094.mq4' 32 bit sürüm değil

Ondan önce, baykuşlar sorunsuz bir şekilde derlendi ve kütüphane de tek bir kelime olmadan. Ve hiç anlamıyorum.

Sistemim (Windows anlamında) 32 bit, diğeri hiç tutmadı. Yedi.

Kütüphane tamamen bana ait. Normalde yeni bir yapı üzerinde gerçek zamanlı olarak gider. Diğer baykuşlar dahil. Ve test cihazında önceki sürümlerde sorunsuz.

Ancak test cihazında açmak istemiyor ve hatta nedeni parmağından emdi.

Ve tüm yardım sayfalarında 32 bitlik durumlar hakkında bir kelime yok.