MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 316

 
Alexey Viktorov :

Gerçekten de, tüm klavyelerde yazdıklarım yoktur... Klavyeyi değiştirebilir miyim?



Çok fazla "uzman" var :) Ben de şaka yapmaya karar verdim. Soruları cevaplamak yerine öğretmeye başlarlar.

 
Luchezar Shalomaev :

Çok fazla "uzman" var :) Ben de şaka yapmaya karar verdim. Soruları cevaplamak yerine öğretmeye başlarlar.

O zaman gelecekte kendi işleriyle meşgul olan ve size yardım etmeye çalışarak dikkati dağılan insanlardan, kendilerini verene şaka yapma konumuna sokarlarsa normal cevaplar beklemeyin.

Bu bir sirk değil.

 
Artyom Trishkin :

O zaman gelecekte kendi işleriyle meşgul olan ve size yardım etmeye çalışarak dikkati dağılan insanlardan, kendilerini verene şaka yapma konumuna sokarlarsa normal cevaplar beklemeyin.

Bu bir sirk değil.



Sayın moderatör, bu bir sirk değilse lütfen sorularımı yanıtlayan palyaçoları kulise götürün. Teşekkür ederim.

 
Luchezar Shalomaev :


Sayın moderatör, bu bir sirk değilse lütfen sorularımı yanıtlayan palyaçoları kulise götürün. Teşekkür ederim.

Seni kulise mi göndereyim?

Sen:

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

MQL4, yardım ve algoritmalar ve kodlar hakkında herhangi bir acemi sorusu

Luchezar Şalomaev , 2017.09.20 22:25

Merhaba. 1 dakikalığına Ducascopy'den EUR USD kotasyonlu bir dosya indirdim, Alpari'yi MT4'e aktarmaya çalışıyorum, hiçbir şey olmuyor. Sadece boş bir dönüşüm penceresi. Ayrıca Instaforex'te. Ne yanlış olabilir?

Cevap:

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

MQL4, yardım ve algoritmalar ve kodlar hakkında herhangi bir acemi sorusu

Vitaly Muzichenko , 2017.09.20 22:32

Dukaskopide ticaret yapacak mısınız? Değil? O zaman neden onların alıntılarına ihtiyacın var?

Sen:

Cevap:

Sen:

Cevap:

Sen:

Sana:

Sen:

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

MQL4, yardım ve algoritmalar ve kodlar hakkında herhangi bir acemi sorusu

Luchezar Şalomaev , 2017.09.21 21:10


Çok fazla "uzman" var :) Ben de şaka yapmaya karar verdim. Soruları cevaplamak yerine öğretmeye başlarlar.


Sorunuz cevaplandı - F2 tuşuna basın , bu da tırnak indirme penceresinin açılmasına yol açar.

Ama şaka yapmaya başladınız, buna karşılık olarak bir şaka aldınız.

Ve ne istedin? Dedikleri gibi geldikleri ile ...

 
Artyom Trishkin :

Seni kulise mi göndereyim?

Sen:

Cevap:

Sen:

Cevap:

Sen:

Cevap:

Sen:

Sana:

Sen:


Sorunuz cevaplandı - F2 tuşuna basın , bu da tırnak indirme penceresinin açılmasına yol açar.

Ama şaka yapmaya başladınız, buna karşılık olarak bir şaka aldınız.

Ve ne istedin? Dedikleri gibi geldikleri ile ...













Bir sirkten bahsetmiyorsun.

 
Aleksey Vyazmikin :
En kolay seçenek, mantığı daha net yazmaktır - ne tür bir mantık olduğunu hemen anlamıyorum ... kelimelerle açıklayabilir misiniz?

Mantıkta bir hata bulundu. Düzeltildi ve her şey çalıştı

 int Doji()
{

//Параметры Дожи
   double Open1 = NormalizeDouble ( iOpen ( Symbol (), PERIOD_H4 , 1 ), Digits );
   double Close1 = NormalizeDouble ( iClose ( Symbol (), PERIOD_H4 , 1 ), Digits );
   double High1 = NormalizeDouble ( iHigh ( Symbol (), PERIOD_H4 , 1 ), Digits );
   double Low1 = NormalizeDouble ( iLow ( Symbol (), PERIOD_H4 , 1 ), Digits );
   
//Параметры предыдущей свечи
   double Open2 = NormalizeDouble ( iOpen ( Symbol (), PERIOD_H4 , 2 ), Digits );
   double Close2 = NormalizeDouble ( iClose ( Symbol (), PERIOD_H4 , 2 ), Digits );
   double High2 = NormalizeDouble ( iHigh ( Symbol (), PERIOD_H4 , 2 ), Digits );
   double Low2 = NormalizeDouble ( iLow ( Symbol (), PERIOD_H4 , 2 ), Digits );
   
//Параметры индикатора волотильности ATR для нахожденя относительно большой свечи перед Доджи
   double ATR = iATR ( Symbol (), PERIOD_H4 , 21 , 1 );
   
   
//Математическое описание патерна Дожи
   if (Close1 < High1 - 0.3 *(High1-Low1) && 
      Open1 < High1 - 0.3 *(High1-Low1) && 
      Close1 > High1 - 0.7 *(High1-Low1) && 
      Open1 > High1 - 0.7 *(High1-Low1) && 
       MathAbs (Close1-Open1) < 0.2 *(High1-Low1)&&
       MathAbs (Close2-Open2) > 0.7 *ATR)
      {
         if ((Close2 - Open2) > 0 && New_Bar == true )
         { 
             Print ( "Down" ); return (- 1 ); // Условие для продаж
         }
         if ((Close2 - Open2) < 0 && New_Bar == true )
         {
             Print ( "Up" ); return ( 1 ); // Условие для покупок
         }
      }
       return ( 0 );
}
Hata, Doji modelinin matematiksel açıklamasındaydı.
 

Şimdi sıradaki görev. Max ve min Doji ve Doji açılış saatine ve Doji'den sonra yeni bir barın açılış saatine göre yapılacak olan ok yerine dikdörtgen çizmek gerekir. Ve bunların hepsi 4 saatlik bir grafikte. Bu durumda, 5 dakika içinde olmam gerekiyor. Ne tavsiye edebilirsin? Nasıl uygulanır?

Teşekkür ederim.

 
voron_026 :

Mantıkta bir hata bulundu. Sabit ve her şey çalıştı

Hata, Doji modelinin matematiksel açıklamasındaydı.

Senin için mutlu. Daha önce programladın mı? Tarzınız pek tipik değil.

voron_026 :

Şimdi sıradaki görev. Max ve min Doji ve Doji açılış saatine ve Doji'den sonra yeni bir barın açılış saatine göre yapılacak olan ok yerine dikdörtgen çizmek gerekir. Ve bunların hepsi 4 saatlik bir grafikte. Bu durumda, 5 dakika içinde olmam gerekiyor. Ne tavsiye edebilirsin? Nasıl uygulanır?

Teşekkür ederim.


İşlevde hesaplanacak ve işlevden döndürülecek ortak (genel) değişkenlerin bir bildirimini yapın void(){} . Zamanı nasıl belirleyeceğinizi biliyorsunuz ... genel olarak, sorunun tam olarak ne olduğunu henüz anlamadım.

Bu arada, daha önce global değişkenlerle yaklaşımı bilmiyordum ve fonksiyondan tüm değerleri bir string değişken aracılığıyla döndürdüm...

 
voron_026 :

Şimdi sıradaki görev. Max ve min Doji ve Doji açılış saatine ve Doji'den sonra yeni bir barın açılış saatine göre yapılacak olan ok yerine dikdörtgen çizmek gerekir. Ve bunların hepsi 4 saatlik bir grafikte. Bu durumda, 5 dakika içinde olmam gerekiyor. Ne tavsiye edebilirsin? Nasıl uygulanır?

Teşekkür ederim.

OBJ_RECTANGLE kullanmanız gerekir, H4 grafiğinden fiyat ve zaman verilerini alabilirsiniz, sadece onları fonksiyona yerleştirmek için kalır

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Aleksey Vyazmikin :

Senin için mutlu. Daha önce programladın mı? Tarzınız pek tipik değil.


İşlevde hesaplanacak ve işlevden döndürülecek ortak (genel) değişkenlerin bir bildirimini yapın void(){} . Zamanı nasıl belirleyeceğinizi biliyorsunuz ... genel olarak, sorunun tam olarak ne olduğunu henüz anlamadım.

Bu arada, daha önce global değişkenlerle yaklaşımı bilmiyordum ve fonksiyondan tüm değerleri bir string değişken aracılığıyla döndürdüm...


İyi günler Aleksey Vyazmikin Programlamaya yeni başladım. Yavaş yavaş konuya giriyorum.

Bu şekilde yapmaya çalıştı:

 //+------------------------------------------------------------------+
//|                                                          111.mq4 |
//|                                       Copyright 2017,UriyGlushko |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017,UriyGlushko"
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict

extern string Rodot           = "Параметры робота" ;
extern double Lots            = 0.2 ;
extern int     StopLoss        = 20 ;
extern int     TakeProfit      = 80 ;
extern int     Magic           = 999999 ;
extern int     Slippage        = 3 ; // Проскальзывание

extern bool UseDojiCandles = true ; // Использование патерна Доджи
int DojiCandle = 0 ;
bool New_Bar = false ;

datetime time0 = iTime ( Symbol (), PERIOD_H4 , 0 );
datetime time1 = iTime ( Symbol (), PERIOD_H4 , 1 );
double open0 = iOpen ( Symbol (), PERIOD_H4 , 0 );
double open1 = iOpen ( Symbol (), PERIOD_H4 , 1 );
double close1 = iClose ( Symbol (), PERIOD_H4 , 1 );
double high1 = iHigh ( Symbol (), PERIOD_H4 , 1 );
double low1 = iLow ( Symbol (), PERIOD_H4 , 1 );
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
{
   if ( Digits == 3 || Digits == 5 )
  {
   TakeProfit *= 10 ;
   StopLoss   *= 10 ;
   Slippage   *= 10 ;
  }
 return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
  
   
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
{
Fun_New_Bar();

   if (UseDojiCandles = true && Doji() == 1 && New_Bar == true )
     {
       if (! ObjectCreate ( ChartID (), "Doji_" + IntegerToString (DojiCandle), OBJ_RECTANGLE , 0 ,time1,open1,time0,open0))
         {
         Print ( "Не удалось создать метку вверх" );
         }
         ObjectSetInteger ( ChartID (), "Doji_" + IntegerToString (DojiCandle), OBJPROP_COLOR , clrRed ); //--- установим цвет прямоугольника 
         ObjectSetInteger ( ChartID (), "Doji_" + IntegerToString (DojiCandle), OBJPROP_STYLE , STYLE_SOLID ); //--- установим стиль линий прямоугольника 
         ObjectSetInteger ( ChartID (), "Doji_" + IntegerToString (DojiCandle), OBJPROP_WIDTH , 1 ); //--- установим толщину линий прямоугольника 
         ObjectSetInteger ( ChartID (), "Doji_" + IntegerToString (DojiCandle), OBJPROP_BACK , false ); //--- отобразим на переднем (false) или заднем (true) плане 
         
         DojiCandle ++;
     }
   

   
   if (UseDojiCandles = true && Doji() == - 1 && New_Bar == true )
     {
       if (! ObjectCreate ( ChartID (), "Doji_" + IntegerToString (DojiCandle), OBJ_RECTANGLE , 0 ,time1,open1,time0,open0))
         {
         Print ( "Не удалось создать метку вниз" );
         }
         ObjectSetInteger ( ChartID (), "Doji_" + IntegerToString (DojiCandle), OBJPROP_COLOR , clrRed ); //--- установим цвет прямоугольника 
         ObjectSetInteger ( ChartID (), "Doji_" + IntegerToString (DojiCandle), OBJPROP_STYLE , STYLE_SOLID ); //--- установим стиль линий прямоугольника 
         ObjectSetInteger ( ChartID (), "Doji_" + IntegerToString (DojiCandle), OBJPROP_WIDTH , 1 ); //--- установим толщину линий прямоугольника 
         ObjectSetInteger ( ChartID (), "Doji_" + IntegerToString (DojiCandle), OBJPROP_BACK , false ); //--- отобразим на переднем (false) или заднем (true) плане 

         DojiCandle ++;
     }
     

   
}
//+------------------------------------------------------------------+
//    Поиск всех объектов
//+------------------------------------------------------------------+


 




//+------------------------------------------------------------------+
//    Функция паттерна Доджи
//+------------------------------------------------------------------+
int Doji()
{

//Параметры Дожи
   double Open1 = NormalizeDouble ( iOpen ( Symbol (), PERIOD_H4 , 1 ), Digits );
   double Close1 = NormalizeDouble ( iClose ( Symbol (), PERIOD_H4 , 1 ), Digits );
   double High1 = NormalizeDouble ( iHigh ( Symbol (), PERIOD_H4 , 1 ), Digits );
   double Low1 = NormalizeDouble ( iLow ( Symbol (), PERIOD_H4 , 1 ), Digits );
   
//Параметры предыдущей свечи
   double Open2 = NormalizeDouble ( iOpen ( Symbol (), PERIOD_H4 , 2 ), Digits );
   double Close2 = NormalizeDouble ( iClose ( Symbol (), PERIOD_H4 , 2 ), Digits );
   double High2 = NormalizeDouble ( iHigh ( Symbol (), PERIOD_H4 , 2 ), Digits );
   double Low2 = NormalizeDouble ( iLow ( Symbol (), PERIOD_H4 , 2 ), Digits );
   
//Параметры индикатора волотильности ATR для нахожденя относительно большой свечи перед Доджи
   double ATR = iATR ( Symbol (), PERIOD_H4 , 21 , 1 );
   
   
//Математическое описание патерна Дожи
   if (Close1 < High1 - 0.3 *(High1-Low1) && 
      Open1 < High1 - 0.3 *(High1-Low1) && 
      Close1 > High1 - 0.7 *(High1-Low1) && 
      Open1 > High1 - 0.7 *(High1-Low1) && 
       MathAbs (Close1-Open1) < 0.2 *(High1-Low1)&&
       MathAbs (Close2-Open2) > 0.7 *ATR)
      {
         if ((Close2 - Open2) > 0 && New_Bar == true )
         { 
             Print ( "Down" ); return (- 1 ); // Условие для продаж
         }
         if ((Close2 - Open2) < 0 && New_Bar == true )
         {
             Print ( "Up" ); return ( 1 ); // Условие для покупок
         }
      }
       return ( 0 );
}
//+------------------------------------------------------------------+
//    Функция определения нового бара
//+------------------------------------------------------------------+
void Fun_New_Bar()                               // Ф-ия обнаружения нового бара 
  {                                             
   datetime TimeBar0 = iTime ( Symbol (), PERIOD_H4 , 0 );
   static datetime New_Time= 0 ;                   // Время текущего бара 
   New_Bar= false ;                               // Нового бара нет 
   if (New_Time != TimeBar0)                         // Сравниваем время 
     { 
      New_Time = TimeBar0;                         // Теперь время такое 
      New_Bar = true ;                             // Поймался новый бар 
     } 
  }  

İlk dikdörtgen çizilir. geri kalanı çizilmez. Nasıl yapacağını düşünürken. İpuçları için teşekkürler ve tipik olmayan tarz ile ne demek istiyorsun?

Neden: