"6 Adımda Kendi Alım Satım Robotunuzu Oluşturun!" makalesi için tartışma

 

Yeni makale 6 Adımda Kendi Alım Satım Robotunuzu Oluşturun! yayınlandı:

Alım satım sınıflarının nasıl oluşturulduğunu bilmiyorsanız ve "Nesne Yönelimli Programlama" kelimelerinden korkuyorsanız, bu makale tam size göredir. Aslında, kendi alım satım sinyalleri modülünüzü yazmak için ayrıntıları bilmenize gerek yoktur. Sadece bazı basit kurallara uyun. Geri kalan her şey MQL5 Sihirbazı tarafından yapılacak ve kullanıma hazır bir alım satım robotu elde edeceksiniz!

Doğru, MQL5 Sihirbazı, Uzman Danışmanların (EA) oluşturulmasını büyük ölçüde basitleştirir, ancak önce bunun için neyin giriş olarak kullanılacağını öğrenmeniz gerekir. MQL5 Sihirbazını kullanarak bir Uzman Danışmanı otomatik olarak oluşturmak için, bileşenlerinin Temel Uzman Danışman Sınıfları bölümündeki beş temel sınıfa uyduğundan emin olun:

  • CExpertBase, diğer dört sınıf için bir temel sınıftır.
  • CExpert, bir alım satım robotu oluşturma sınıfıdır; alım satımı yapan sınıf budur.
  • CExpertSignal , alım satım sinyalleri modülü oluşturmaya yönelik bir sınıftır; makale bu sınıf hakkındadır.
  • CExpertTrailing, koruyucu bir Zarar Durdur takibine yönelik bir sınıftır.
  • CExpertMoney para yönetimi sınıfıdır.

Nesne yönelimli programlama (OOP) olarak adlandırılan "büyük ve korkunç" yaklaşımın tüm gücü buradadır. Ama korkmayın, artık hemen hemen herkesin birçok fonksiyonu olan bir cep telefonu var ve neredeyse hiç kimse nasıl çalıştığını bilmiyor. Bütün bunları incelememize gerek yok, sadece CExpertSignal sınıfının bazı fonksiyonlarını tartışacağız.


Yazar: MetaQuotes

 
Ve her şey yoluna girecek - ticaret robotları 5 fare tıklamasıyla oluşturulur, оптимизации параметров ticaret sistemi için bir test cihazında test edilebilir, ortaya çıkan robotu hesabınızda işlem yapmaya koyabilirsiniz ve bir dosya ile hiçbir şeyi değiştirmenize gerek yoktur.
Böyle bir robotun ticaret yapmasına izin verilebilir mi? Sonuçta, ticaret sınıfları kütüphanesi, gerçek ticaret bir yana, şampiyonada bile gerekli bir koşul olan çeşitli hataların işlenmesini içermez. Yalnızca test cihazındaki fikirleri hızlı bir şekilde kontrol etmek için beş tıklamayla bir Uzman Danışman oluşturabileceğinizi yazmak daha doğrudur, ancak böyle bir Uzman Danışman ticaret için uygun olmayacaktır.
 
Çalışmalarınız için teşekkür ederiz! Kutu ve küplerin olduğu resim için de teşekkürler! Sistematikleştirir :-)
 

devam etmek için...

Bu örneğin satırlarını dönüştürmeyi düşündüm:

if(m_method_fast!=MODE_SMA && m_method_fast!=MODE_EMA && m_method_fast!=MODE_SMMA && m_method_fast!=MODE_LWMA)

if(m_method_slow!=MODE_SMA && m_method_slow!=MODE_EMA && m_method_slow!=MODE_SMMA && m_method_slow!=MODE_LWMA)

Algoritmanın içine:

1) iki dizi:

ilki m_method_fast ve m_method_slow içerir

ikincisi ENUM_MA_METHOD numaralandırma değerlerini içerir.

2) Bir döngü içinde, ilk dizinin değerini alarak, ikincisinde bulunup bulunmadığını kontrol edin.

Bunu nasıl uygulayacağımı söyleyebilir misiniz?

CArray'i bağlamak gerektiğini anlıyorum. Ama ne tür?

Kim, lütfen, kodun bir bölümünü yazabilir, çünkü temel temel şeyler ve sözdizimi ile henüz yakalayamıyorum.

Teşekkür ederim!

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Методы скользящих
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Методы скользящих
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Методы скользящих - Документация по MQL5
 
bivmail:

devam etmek için...

Bu örneğin satırlarını dönüştürmeyi düşündüm:

if(m_method_fast!=MODE_SMA && m_method_fast!=MODE_EMA && m_method_fast!=MODE_SMMA && m_method_fast!=MODE_LWMA)

if(m_method_slow!=MODE_SMA && m_method_slow!=MODE_EMA && m_method_slow!=MODE_SMMA && m_method_slow!=MODE_LWMA)

Algoritmanın içine:

1) iki dizi:

ilki m_method_fast ve m_method_slow içerir

ikincisi ENUM_MA_METHOD numaralandırma değerlerini içerir.

2) Bir döngü içinde, ilk dizinin değerini alarak, ikincisinde bulunup bulunmadığını kontrol edin.

Bunu nasıl uygulayacağımı söyleyebilir misiniz?

CArray'i bağlamak gerektiğini anlıyorum. Ama ne tür?

Kim, lütfen, kodun bir kısmını yazabilir, çünkü temel temel şeyler ve sözdizimi ile henüz yakalayamıyorum.

Teşekkürler!

Bunun gibi:

func(int& array1[],int& array2[])
  {
   int total1=ArraySize(array1);
   int total2=ArraySize(array2);
//---
   for(int i=0;i<total1;i++)
     {
      for(int j=0;j<total2;j++)
        {
         if(array1[i]==array2[j])
           {
            // buldum
           }
        }
     }
  }
 

Evet, Yeni Başlayanlar için C++'da bu noktaya zaten gelmiştim :-)

Ancak orada ENUM_MA_METHOD diye bir veri tipi yok

Bu numaralandırmanın hangi veri türünden oluştuğunu nasıl bulabilirim? ENUM_MA_METHOD numar alandırmasının kendisi üzerinden döngü yapmak mümkün mü?

Şimdi iki yol görüyorum:

//her iki diziyi de tanımlamanın ilk yolu

  ENUM_MA_METHOD l_array_enum_ma_method[3];

  l_array_enum_ma_method[0]=MODE_SMA;

  l_array_enum_ma_method[1]=MODE_EMA;

  l_array_enum_ma_method[2]=MODE_SMMA;

  l_array_enum_ma_method[3]=MODE_LWMA;

  print("array size %d", ArraySize(l_array_enum_ma_method));

  print("ENUM_MA_METHOD size %d", ArraySize(ENUM_MA_METHOD));

  

   ENUM_MA_METHOD l_array_select_method[1];

   l_array_select_method[0]=m_MethodFast;

   l_array_select_method[1]=m_MethodSlow;

   //şemaya göre daha fazlası

   

   //ikinci yol, kütüphaneyi bağlayın

   //#include <Arrays\ArrayInt.mqh>

     CArrayInt *l_array_enum_ma_method=new CArrayInt;

   l_array_enum_ma_method[0]=MODE_SMA;

  l_array_enum_ma_method[1]=MODE_EMA;

  l_array_enum_ma_method[2]=MODE_SMMA;

  l_array_enum_ma_method[3]=MODE_LWMA;

   l_array_enum_ma_method.Sort();

   //--- arama öğesi

   if(l_array_enum_ma_method.Search(m_MethodFast)!=-1) printf("Element found");

   else                        printf("Element not found");

   //--- diziyi sil

   delete l_array_enum_ma_method;

ikinci şekilde belirli bir türde bir kütüphane bağlamanız gerekir ve ENUM_MA_METHOD hangi türdür?

hmm... garip, yanıtla'ya tıkladım ve yeni bir gönderi olduğu ortaya çıktı....

 
Kodun nasıl doğru şekilde ekleneceğini görün.
 
bivmail:

Evet, Yeni Başlayanlar için C++'da bu noktaya zaten gelmiştim :-)

Ancak orada ENUM_MA_METHOD diye bir veri tipi yok

Bu numaralandırmanın hangi veri türünden oluştuğunu nasıl bulabilirim? ENUM_MA_METHOD numar alandırmasının kendisi üzerinden döngü yapmak mümkün mü?

Şimdi iki yol görüyorum:

ikinci şekilde belirli bir türde bir kütüphane bağlamanız gerekir ve ENUM_MA_METHOD hangi türdür?

hmm... garip, yanıtla'ya tıkladım ve yeni bir yazı olduğu ortaya çıktı....

Birinci yol

 ENUM_MA_METHOD l_array_enum_ma_method[]={MODE_SMA,MODE_EMA,MODE_SMMA,MODE_LWMA};
//--- satırın ilerisinde

İkinci yol:

#include <Arrays\ArrayInt.mqh>

CArrayInt l_array_enum_ma_method;
//---
l_array_enum_ma_method.Add(MODE_SMA);
l_array_enum_ma_method.Add(MODE_EMA);
l_array_enum_ma_method.Add(MODE_SMMA);
l_array_enum_ma_method.Add(MODE_LWMA);
//--- satırın ilerisinde

Neden bu kadar çok adım gerektiğini anlayamıyorum?

 

oops... çok teşekkürler, ben de bunu yapmaya çalışıyorum... off.

İlk durumda, bu kayıt yöntemini zaten görmüştüm, ancak henüz neye ihtiyacım olduğunu fark etmemiştim,

ve ikinci durumda - ArrayInt ile kafam karıştı. Int olduğu için bunun sadece sayı değerinin saklandığı anlamına geldiğini düşündüm, ancak ,

Görünüşe göre derleyici MODE_SMA'yı bir sayıya dönüştürüyor ve değeri geri alırken,(ENUM_MA_METHOD) türüne örtük bir dönüşüm (parantez kullanarak) gerçekleştirmek gerekecek, yani aşağıdakine benzer bir şey.

  ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);

Not: Üçüncü bölümde 3. Parametreleri ayarlama yöntemleri, zamanından önce bildirilen satırları silmemiz gerektiğini düşünüyorum,
:

 CiCustom          m_fast_ma;        // nesne olarak gösterge
   CiCustom          m_slow_ma;        // nesne olarak gösterge
 
bivmail:

Not: Üçüncü bölüm 3. Parametreleri ayarlama yöntemleri'nde, zamanından önce bildirilen satırları silmemiz gerektiğini düşünüyorum:

Kaldırıldı, teşekkürler.
 

Heyecanlanıyordum, ancak bunu aşamıyorum (comm - bellek adresi aktarımı hakkında bir şeyler okudum, ancak o şekilde de çalışmadı):

Derleyici 'm_MethodFast' - sabit ifade gerekli, ' m_MethodSlow' - sabit ifade gerekli hatasını döndürüyor

Tabii ki, bunlar aptallar için sorular. belki de makaleyi tıkamamak için bu tür soruları başka bir başlıkta sormalıyım?

//her iki diziyi de tanımlamanın ilk yolu
//int *Finger_m_MethodFast;
//int *Finger_m_MethodSlow;
//Finger_m_MethodFast=&m_MethodFast;
//Finger_m_MethodFast=&m_MethodSlow;
// int l_array1_select_method[]={Finger_m_MethodFast,Finger_m_MethodFast};
   ENUM_MA_METHOD l_array1_select_method[]={m_MethodFast,m_MethodSlow};
   ENUM_MA_METHOD l_array2_enum_ma_method[]={MODE_SMA,MODE_EMA,MODE_SMMA,MODE_LWMA};

   int total_array1=ArraySize(l_array1_select_method);
   int total_array2=ArraySize(l_array2_enum_ma_method);
   bool NoErrorsFlag=false;
   for(int i_array1=0;i_array1<total_array1;i_array1++)
     {

      for(int i_array2=0;i_array2<total_array2;i_array2++)
        {
         if(l_array1_select_method[i_array1]=l_array2_enum_ma_method[i_array2])
           {
            NoErrorsFlag=true;
           }
        }
      if(!NoErrorsFlag)
        {
         PrintFormat("Geçersiz yumuşatma türü %s hareketli ortalama!",EnumToString(l_array1_select_method[i_array1]));
        }

     }

   if(!NoErrorsFlag)
     {
      return(false);
     }