English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
Makine Öğrenmesi: Destek Vektör Makineleri Ticarette Nasıl Kullanılabilir?

Makine Öğrenmesi: Destek Vektör Makineleri Ticarette Nasıl Kullanılabilir?

MetaTrader 5Ticaret | 13 Ocak 2022, 09:08
136 0
Josh Readhead
Josh Readhead

Destek Vektör Makinesi nedir?

Bir destek vektör makinesi, girdi verilerini almaya ve bunları iki kategoriden birine sınıflandırmaya yarayan bir makine öğrenimi yöntemidir. Bir destek vektör makinesinin etkili olması için, ilk olarak yeni verileri sınıflandırmak için kullanılabilecek destek vektör makinesi modelini oluşturmak amacıyla bir dizi eğitim girdi ve çıktı verisi kullanmak gerekir.

Bir destek vektörü makinesi, eğitim girdilerini alıp bunları çok boyutlu uzaya eşleyerek ve ardından girdilerin iki sınıfını en iyi şekilde ayıran bir hiper düzlem (bir hiper düzlem, n-boyutlu boşlukta, boşluğu iki yarım boşluğa ayıran bir yüzeydir) bulmak için regresyon kullanarak bu modeli geliştirir. Destek vektör makinesi bir kez eğitildikten sonra, yeni girdileri ayırma hiper düzlemine göre değerlendirebilir ve bunu iki kategoriden birinde sınıflandırabilir.

Bir destek vektör makinesi aslen bir girdi/çıktı makinesidir. Bir kullanıcı bir girdi girebilir ve makine eğitim yoluyla geliştirilen modele göre bir çıktı döndürür. Verilen herhangi bir destek vektör makinesi için girdi sayısı teorik olarak birden sonsuza kadar gider, ancak pratik açıdan bilgi işlem gücü kaç girdinin kullanılabileceğini sınırlar. Örneğin, belirli bir destek vektör makinesi için N sayıda girdi kullanılıyorsa (N'nin tamsayı değeri birden sonsuza kadar değişebilir), destek vektör makinesi her bir girdi kümesini N boyutlu uzaya eşlemeli ve eğitim verilerini en iyi şekilde ayıran bir (N-1) boyutlu hiper düzlem bulmalıdır.

Girdi/Çıktı Makinesi

Şekil 1. Destek Vektör Makineleri girdi/çıktı makineleridir

Bir destek vektör makinesinin nasıl çalıştığını kavramsallaştırmanın en iyi yolu, iki boyutlu durumu değerlendirmektir. İki girdisi olan ve veri noktasını iki kategoriden birine ait olarak sınıflandıran tek bir çıktı döndüren bir destek vektör makinesi oluşturmak istediğimizi varsayalım. Aşağıdaki grafik gibi 2 boyutlu bir grafik üzerine çizerek bunu görselleştirebiliriz.

Ayırma Hiper düzlemi

Şekil 2. Sol: 2D grafiğe eşlenen destek vektör makine girdileri. Kırmızı daireler ve mavi çarpı işaretleri, girdilerin iki sınıfını belirtmek için kullanılır.

Şekil 3. Sağ: 2D grafiğe eşlenen destek vektör makine girdileri. Kırmızı daireler ve mavi çarpı işaretleri, ayırıcı hiper düzlemi belirten siyah bir çizgiyle girdilerin iki sınıfını belirtmek için kullanılır.

Bu örnekte mavi çarpı işaretleri, kategori 1'e ait veri noktalarını ve kategori 2'ye ait veri noktalarını temsil eden kırmızı daireleri belirtir. Ayrı veri noktalarının her birinde benzersiz girdi 1 değeri (x eksenindeki konumlarıyla temsil edilir) ve benzersiz bir girdi 2 değeri (y eksenindeki konumlarıyla temsil edilir) vardır ve bu noktaların tümü 2 boyutlu uzay ile eşlenmiştir.

Bir destek vektör makinesi, bu noktaların 2 boyutlu uzayda bir modelini oluşturarak verileri sınıflandırabilir. Destek vektör makinesi, verileri 2 boyutlu uzayda gözlemler ve verileri iki kategoriye en doğru şekilde ayıran 1 boyutlu bir hiper düzlemi (diğer adıyla çizgiyi) bulmak için bir regresyon algoritması kullanır. Daha sonra bu ayırma çizgisi, destek vektör makinesi tarafından yeni veri noktalarını kategori 1 veya kategori 2 olarak sınıflandırmak için kullanılır.

Aşağıdaki animasyon, yeni bir destek vektör makinesinin eğitim sürecini göstermektedir. Algoritma, rastgele bir tahminde bulunarak ayırıcı bir hiper düzlem oluşturmaya başlayacak ve hiper düzlemin doğruluğunu yinelemeli olarak iyileştirecektir. Gördüğünüz gibi algoritma oldukça agresif bir şekilde başlıyor, ancak istenilen çözüme yaklaşmaya başladığında yavaşlıyor.

Optimal Ayırma Hiper düzlemini Bulan Destek Vektör Makinesi Regresyon Algoritması

Şekil 4. Bir destek vektörü makine eğitimini gösteren bir animasyon. Hiper düzlem, iki veri sınıfını ayırmak için ideal geometride kademeli olarak yakınsar

Daha Büyük Boyutlar

Yukarıda sunulan 2 boyutlu senaryo, bir destek vektör makinesinin sürecini görselleştirmemizi sağlar, ancak bir veri noktasını yalnızca iki girdi kullanarak sınıflandırabilir. Ya daha fazla girdi kullanmak istersek? Neyse ki, destek vektör makinesi algoritması, kavramsallaştırması çok daha zor olsa da, bunu daha yüksek boyutlarda yapmamıza olanak sağlıyor.

Şunu düşünün: 20 girdi alan ve bu girdileri kullanarak herhangi bir veri noktasını kategori 1 veya kategori 2 olarak sınıflandırabilen destek vektör makinesi oluşturmak istiyorsunuz. Bunun için, destek vektör makinesinin verileri 20 boyutlu uzayda modellemesi ve veri noktalarını iki kategoriye ayıran 19 boyutlu bir hiper düzlem bulmak için bir regresyon algoritması kullanması gerekir. 3 boyutun üzerindeki herhangi bir şeyi kavramak bizim için zor olduğundan bunu görselleştirmek son derece zor hale geliyor, ancak bunun 2 boyutlu durum ile tam olarak aynı şekilde çalıştığını bilmelisiniz.


Destek Vektör Makineleri Nasıl Çalışır? Örnek: Bu bir Schnick mi?

Bu varsayımsal senaryoyu hayal edin, yalnızca Arktik derinliklerinde bulunan Schnick adlı nadir bir hayvanı araştıran bir araştırmacısınız. Bu hayvanların uzak konumu düşünüldüğünde, şimdiye kadar bulunanlar çok az sayıda (diyelim ki 5000 civarında). Bir araştırmacı olarak, şu soruya takıldınız: Bir Schnick'i nasıl tanımlayabilirim?

Bildiğiniz tek şey, bir tanesini görmüş az sayıda araştırmacı tarafından daha önce yayınlanmış araştırma makaleleri. Bu araştırma makalelerinde, yazarlar buldukları schnick’ler hakkında belirli özellikleri, yani boy, kilo, ayak sayısı vb. açıklıyor. Ancak bu özelliklerin tümü, ayırt edilebilir bir model olmaksızın araştırma makaleleri arasında değişiklik gösteriyor.

Bu verileri yeni bir hayvanı schnick olarak tanımlamak için nasıl kullanabiliriz?

Sorunumuzun olası bir çözümü, verilerdeki modelleri tanımlamak için bir destek vektör makinesi kullanmak ve hayvanları schnick veya schnick değil olarak sınıflandırmak için kullanılabilecek bir çerçeve oluşturmaktır. İlk adım, destek vektör makinenizi schnick’leri tanımlamaları için eğitmek üzere kullanılabilecek verilerin bir kümesini oluşturmaktır. Eğitim verileri, destek vektör makinesinin analiz edip bir model çıkarması için girdilerin ve eşleşen çıktıların bir kümesidir.

Dolayısıyla, hangi girdilerin ve kaç girdinin kullanılacağına karar vermeliyiz. Teorik olarak, istediğimiz kadar girdimiz olabilir, ancak bu yavaş eğitime yol açabilir (ne kadar çok girdiniz varsa, destek vektör makinesi model çıkarma için o kadar fazla zaman harcar). Ayrıca, nispeten tüm schnick’ler arasında tutarlı olma eğiliminde olacak girdi değerleri seçmek istersiniz. Örneğin, hayvanın boyu veya ağırlığı, girdi için iyi bir örnek olacaktır, çünkü bunun tüm schnick’ler arasında nispeten tutarlı olmasını beklersiniz. Bununla birlikte, bir hayvanın ortalama yaşı zayıf bir girdi seçimi olacaktır, çünkü tanımlanan hayvanların yaşının önemli ölçüde değişeceğini bekleyebilirsiniz.

Bu nedenle aşağıdaki girdiler seçilmiştir:

  • Boy
  • Kilo
  • Ayak sayısı
  • Göz sayısı
  • Hayvanın kollarının uzunluğu
  • Hayvanın ortalama hızı
  • Hayvanların çiftleşme çağrısı sıklığı

Seçilen girdiler ile eğitim verilerimizi derlemeye başlayabiliriz. Bir destek vektör makinesi için etkili eğitim verileri belirli gereklilikleri karşılamalıdır:

  • Verilerde, schnick olan hayvan örnekleri olmalıdır
  • Verilerde schnick olmayan hayvan örnekleri olmalıdır

Bizim durumumuzda, elimizde bir schnick hayvanını başarıyla tanımlamış ve özelliklerini listelemiş bir bilim adamının araştırma makalesi var. Dolayısıyla, bu araştırma makalelerini okuyabilir ve her bir girdinin altındaki verileri çıkarabilir ve örneklerin her birine true veya false bir çıktı atayabiliriz. Bu durumda eğitim verileri aşağıdaki tabloya benzer görünebilir.

Eğitim Örnekleri boy [mm] kilo [kg] N_ayak N_göz L_kol [mm] ort_hız [m/s] s_çağrı [Hz] Schnick (true/false)
Örnek 1 1030 45 8 3 420 2,1 14000 TRUE
Örnek 2 1010 42 8 3 450 2,2 14000 TRUE
Örnek 3 900 40 7 6 600 6 13000 FALSE
Örnek 4 1050 43 9 4 400 2,4 12000 TRUE
Örnek 5 700 35 2 8 320 21 13500 FALSE
Örnek 6 1070 42 8 3 430 2,4 12000 TRUE
Örnek 7 1100 40 8 3 430 2,1 11000 TRUE
Örnek N ... ... ... ... ... ... ... ...

Tablo 1. Schnick gözlemlerinin örnek tablosu

Tüm eğitim girdi ve çıktılarımız için verileri topladıktan sonra, bunları destek vektör makinemizi eğitmek için kullanabiliriz. Destek vektör makinesi, eğitim süreci sırasında, eğitim örneklerinin her birini true veya false olarak ayırmak için kullanılabilecek yedi boyutlu uzayda bir model oluşturacaktır. Destek vektör makinesi, eğitim verilerini (belirtilen hata toleransı dahilinde) doğru bir şekilde temsil eden bir model oluncaya kadar bunu yapmaya devam edecektir. Eğitimin tamamlanmasının ardından, bu model yeni veri noktalarını true veya false olarak sınıflandırmak için kullanılabilir.


Destek Vektör Makinesi Gerçekten Çalışıyor mu?

Schnick senaryosunu kullanarak, bir destek vektör makinesinin yeni schnick’leri gerçekten ne kadar iyi tanımlayabildiğini test eden bir betik yazdım. Bunun için, Marketten indirilebilen "Destek Vektör Makinesi Öğrenme Aracı" fonksiyonu Kitaplığını kullandım.

Bu senaryoyu etkili bir şekilde modellemek için, ilk olarak bir Schnick’in gerçek özelliklerinin ne olduğuna karar vermemiz gerekir. Bu durumda varsaydığım özellikler aşağıdaki tabloda listelenmiştir. Bir hayvan aşağıdaki kriterlerin tümünü karşılıyorsa bir Schnicktir.

Parametre Alt Aralık Üst Aralık
boy [mm] 1000 1100
kilo [kg] 40 50
N_ayak 8 10
N_göz 3 4
L_kol [mm] 400 450
ort_hız [m/s] 2 2,5
s_çağrı [Hz] 11000 15000

Tablo 2. Bir schnick’i tanımlayan parametrelerin özeti

Artık Schnick'imizi tanımladığımıza göre, bu tanımı destek vektör makineleri ile deneme yapmak için kullanabiliriz. Birinci adım, belirli bir hayvan için yedi girdi alabilen ve hayvanın gerçek sınıflandırmasının bir schnick olup olmadığını döndürebilen bir fonksiyon oluşturmaktır. Bu fonksiyon, destek vektör makinesi için eğitim verileri oluşturmak ve en sonda bunun performansını değerlendirmek için kullanılacaktır. Bu ise, aşağıdaki fonksiyon kullanılarak yapılabilir:

//+------------------------------------------------------------------+
//| This function takes the observation properties of the observed 
//| animal and based on the criteria we have chosen, returns true/false whether it is a schnick
//+------------------------------------------------------------------+
bool isItASchnick(double height,double weight,double N_legs,double N_eyes,double L_arm,double av_speed,double f_call)
  {
   if(height   < 1000  || height   > 1100)  return(false);   // If the height is outside the parameters > return(false)
   if(weight   < 40    || weight   > 50)    return(false);   // If the weight is outside the parameters > return(false)
   if(N_legs   < 8     || N_legs   > 10)    return(false);   // If the N_Legs is outside the parameters > return(false)
   if(N_eyes   < 3     || N_eyes   > 4)     return(false);   // If the N_eyes is outside the parameters > return(false)
   if(L_arm    < 400   || L_arm    > 450)   return(false);   // If the L_arm  is outside the parameters > return(false)
   if(av_speed < 2     || av_speed > 2.5)   return(false);   // If the av_speed is outside the parameters > return(false)
   if(f_call   < 11000 || f_call   > 15000) return(false);   // If the f_call is outside the parameters > return(false)
   return(true);                                             // Otherwise > return(true)
  }

Süreçteki bir sonraki adım, eğitim girdilerini ve çıktılarını oluşturabilen bir fonksiyon oluşturmaktır. Bu durumda girdiler, yedi girdi değerinin her biri için belirli bir aralıkta rastgele sayılar yaratılarak oluşturulacaktır. Daha sonra yukarıdaki isItASchnick() fonksiyonu, oluşturulan rastgele girdilerin kümelerinden her biri için karşılık gelen istenen çıktıyı oluşturmak için kullanılacaktır. Bu ise, aşağıdaki fonksiyonda yapılmaktadır:

//+------------------------------------------------------------------+
//| This function takes an empty double array and an empty boolean array,
//| and generates the inputs/outputs to be used for training the SVM
//+------------------------------------------------------------------+ 
void genTrainingData(double &inputs[],bool &outputs[],int N)
  {
   double in[];                    // Creates an empty double array to be used for temporarily storing the inputs generated
   ArrayResize(in,N_Inputs);       // Resize the in[] array to N_Inputs
   ArrayResize(inputs,N*N_Inputs); // Resize the inputs[] array to have a size of N*N_Inputs 
   ArrayResize(outputs,N);         // Resize the outputs[] array to have a size of N 
   for(int i=0;i<N;i++)
     {
      in[0]=    randBetween(980,1120);      // Random input generated for height
      in[1]=    randBetween(38,52);         // Random input generated for weight
      in[2]=    randBetween(7,11);          // Random input generated for N_legs
      in[3]=    randBetween(3,4.2);         // Random input generated for N_eyes
      in[4]=    randBetween(380,450);       // Random input generated for L_arms
      in[5]=    randBetween(2,2.6);         // Random input generated for av_speed
      in[6]=    randBetween(10500,15500);   // Random input generated for f_call
      ArrayCopy(inputs,in,i*N_Inputs,0,N_Inputs);                         // Copy the new random inputs generated into the training input array
      outputs[i]=isItASchnick(in[0],in[1],in[2],in[3],in[4],in[5],in[6]); // Assess the random inputs and determine if it is a schnick
     }
  }
//+------------------------------------------------------------------+
//| This function is used to create a random value between t1 and t2
//+------------------------------------------------------------------+ 
double randBetween(double t1,double t2)
  {
   return((t2-t1)*((double)MathRand()/(double)32767)+t1);
  }

Artık eğitim girdi ve çıktılarımızın bir kümesi var, artık Markette bulunan 'Destek Vektör Makine Öğrenimi Aracını' kullanarak destek vektör makinelerimizi oluşturma zamanı. Yeni bir destek vektör makinesi oluşturduktan sonra, eğitim girdi ve çıktılarının bu makineye aktarılması ve eğitimin çalıştırılması gerekir.

void OnStart()
  {
   double inputs[];              // Empty double array to be used for creating training inputs
   bool   outputs[];             // Empty bool array to be used for creating training inputs
   int    N_TrainingPoints=5000; // Defines the number of training samples to be generated
   int    N_TestPoints=5000;     // Defines the number of samples to be used when testing

   genTrainingData(inputs,outputs,N_TrainingPoints); //Generates the inputs and outputs to be used for training the SVM

   int handle1=initSVMachine();             // Initializes a new support vector machine and returns a handle
   setInputs(handle1,inputs,7);             // Passes the inputs (without errors) to the support vector machine
   setOutputs(handle1,outputs);             // Passes the outputs (without errors) to the support vector machine
   setParameter(handle1,OP_TOLERANCE,0.05); // Sets the error tolerance parameter to <5%
   training(handle1);                       // Trains the support vector machine using the inputs/outputs passed
  }

Artık Schnick'leri tanımlama konusunda başarılı bir şekilde eğitilmiş bir destek vektör makinemiz var. Bunu doğrulamak için, nihai destek vektör makinesini yeni veri noktalarını sınıflandırmasını isteyerek test edebiliriz. Bu, ilk olarak rastgele girdiler üreterek, ardından bu girdilerin gerçek bir Schnick'e karşılık gelip gelmediğini belirlemek için isItASchnick() fonksiyonunu kullanarak, ardından girdileri sınıflandırmak için destek vektör makinesini kullanarak ve tahmin edilen sonucun gerçek sonuçla eşleşip eşleşmediğini belirleyerek yapılır. Bu ise, aşağıdaki fonksiyonda yapılmaktadır:

//+------------------------------------------------------------------+
//| This function takes the handle for the trained SVM and tests how
//| successful it is at classifying new random inputs
//+------------------------------------------------------------------+ 
double testSVM(int handle,int N)
  {
   double in[];
   int atrue=0;
   int afalse=0;
   int N_correct=0;
   bool Predicted_Output;
   bool Actual_Output;
   ArrayResize(in,N_Inputs);
   for(int i=0;i<N;i++)
     {
      in[0]=    randBetween(980,1120);      // Random input generated for height
      in[1]=    randBetween(38,52);         // Random input generated for weight
      in[2]=    randBetween(7,11);          // Random input generated for N_legs
      in[3]=    randBetween(3,4.2);         // Random input generated for N_eyes
      in[4]=    randBetween(380,450);       // Random input generated for L_arms
      in[5]=    randBetween(2,2.6);         // Random input generated for av_speed
      in[6]=    randBetween(10500,15500);   // Random input generated for f_call
      Actual_Output=isItASchnick(in[0],in[1],in[2],in[3],in[4],in[5],in[6]); // Uses the isItASchnick fcn to determine the actual desired output
      Predicted_Output=classify(handle,in);                                  // Uses the trained SVM to return the predicted output.
      if(Actual_Output==Predicted_Output)
        {
         N_correct++;   // This statement keeps count of the number of times the predicted output is correct.
        }
     }

   return(100*((double)N_correct/(double)N));   // Returns the accuracy of the trained SVM as a percentage
  }

Destek vektör makinesinin farklı koşullar altında nasıl performans gösterdiğini görmek için yukarıdaki fonksiyonlardaki değerlerle oynamanızı tavsiye ederim.


Destek Vektör Makinesi Neden Bu Kadar Faydalıdır?

Verilerden karmaşık model çıkarmak için bir destek vektör makinesi kullanmanın faydası, verilerin davranışının önceden anlaşılmasını gerektirmemesidir. Bir destek vektör makinesi, verileri analiz edebilir ve yalnızca içgörülerini ve bunların ilişkilerini çıkarabilir. Bu şekilde, bir girdi alan ve verilerde çok karmaşık ve açık olmayan modelleri bulmada çok faydalı olabilecek bir çıktı üreten bir kara kutuya benzer şekilde çalışır.

Destek vektör makinelerinin en iyi özelliklerinden biri, verilerdeki hatalar ve gürültü ile çok iyi başa çıkabilmeleridir. Bu makineler, genellikle verilerdeki temel modeli görebilir ve veri aykırı değerleri ile diğer karmaşıklıkları filtreleyebilir. Aşağıdaki senaryoyu düşünün: schnick’ler üzerine araştırmanızı yaparken, schnick’leri çok farklı özelliklere (200 kg ve 15000 mm boyunda bir schnick gibi) sahip şekilde tanımlayan birden fazla araştırma makalesine rastladınız.

Bunun gibi hatalar, bir schnick’in ne olduğuna dair modelinizin bozulmasına yol açabilir ve bu da yeni schnick keşiflerini sınıflandırırken potansiyel olarak bir hata yapmanıza yol açabilir. Destek vektör makinesinin faydası, tüm eğitim veri noktaları ile uyumlu bir model değil, temel model ile uyumlu bir model geliştirmesidir. Bu ise, destek vektör makinesinin verilerdeki herhangi bir hatayı görmezden gelmesini sağlamak için modelde belirli bir hata düzeyine izin verilerek yapılır.

Schnick destek vektör makinesi durumunda, %5'lik bir hata toleransına izin verirsek, eğitim yalnızca eğitim verilerinin %95'i ile uyumlu bir model geliştirmeye çalışacaktır. Bu da, eğitim aykırı değerlerin küçük bir yüzdesini görmezden geldiği için faydalı olabilir.

Destek vektör makinesinin bu özelliğini schnick betiğimizi değiştirerek daha fazla araştırabiliriz. Aşağıdaki fonksiyon, eğitim veri kümemize kasıtlı rastgele hatalar eklemek için dahil edilmiştir. Bu fonksiyon eğitim noktalarını rastgele seçecek ve girdileri ve karşılık gelen çıktıları rastgele değişkenler ile değiştirecektir.

//+------------------------------------------------------------------+
//| This function takes the correct training inputs and outputs generated
//| and inserts N random errors into the data
//+------------------------------------------------------------------+ 
void insertRandomErrors(double &inputs[],bool &outputs[],int N)
  {
   int    nTrainingPoints=ArraySize(outputs); // Calculates the number of training points
   int    index;                              // Creates new integer 'index'
   bool   randomOutput;                       // Creates new bool 'randomOutput'
   double in[];                               // Creates an empty double array to be used for temporarily storing the inputs generated
   ArrayResize(in,N_Inputs);                  // Resize the in[] array to N_Inputs
   for(int i=0;i<N;i++)
     {
      in[0]=    randBetween(980,1120);        // Random input generated for height
      in[1]=    randBetween(38,52);           // Random input generated for weight
      in[2]=    randBetween(7,11);            // Random input generated for N_legs
      in[3]=    randBetween(3,4.2);           // Random input generated for N_eyes
      in[4]=    randBetween(380,450);         // Random input generated for L_arms
      in[5]=    randBetween(2,2.6);           // Random input generated for av_speed
      in[6]=    randBetween(10500,15500);     // Random input generated for f_call

      index=(int)MathRound(randBetween(0,nTrainingPoints-1)); // Randomly chooses one of the training inputs to insert an error
      if(randBetween(0,1)>0.5) randomOutput=true;             // Generates a random boolean output to be used to create an error
      else                     randomOutput=false;

      ArrayCopy(inputs,in,index*N_Inputs,0,N_Inputs);         // Copy the new random inputs generated into the training input array
      outputs[index]=randomOutput;                            // Copy the new random output generated into the training output array
     }
  }

Bu fonksiyon, eğitim verilerimize kasıtlı hatalar eklememize olanak sağlar. Bu hata dolu verileri kullanarak, yeni bir destek vektör makinesi oluşturup eğitebilir ve bunun performansını orijinali ile karşılaştırabiliriz.

void OnStart()
  {
   double inputs[];              // Empty double array to be used for creating training inputs
   bool   outputs[];             // Empty bool array to be used for creating training inputs
   int    N_TrainingPoints=5000; // Defines the number of training samples to be generated
   int    N_TestPoints=5000;     // Defines the number of samples to be used when testing

   genTrainingData(inputs,outputs,N_TrainingPoints); // Generates the inputs and outputs to be used for training the svm

   int handle1=initSVMachine();             // Initializes a new support vector machine and returns a handle
   setInputs(handle1,inputs,7);             // Passes the inputs (without errors) to the support vector machine
   setOutputs(handle1,outputs);             // Passes the outputs (without errors) to the support vector machine
   setParameter(handle1,OP_TOLERANCE,0.05); // Sets the error tolerance parameter to <5%
   training(handle1);                       // Trains the support vector machine using the inputs/outputs passed

   insertRandomErrors(inputs,outputs,500);  // Takes the original inputs/outputs generated and adds random errors to the data

   int handle2=initSVMachine();             // Initializes a new support vector machine and returns a handle
   setInputs(handle2,inputs,7);             // Passes the inputs (with errors) to the support vector machine
   setOutputs(handle2,outputs);             // Passes the outputs (with errors) to the support vector machine
   setParameter(handle2,OP_TOLERANCE,0.05); // Sets the error tolerance parameter to <5%
   training(handle2);                       // Trains the support vector machine using the inputs/outputs passed

   double t1=testSVM(handle1,N_TestPoints); // Tests the accuracy of the trained support vector machine and saves it to t1
   double t2=testSVM(handle2,N_TestPoints); // Tests the accuracy of the trained support vector machine and saves it to t2

   Print("The SVM accuracy is ",NormalizeDouble(t1,2),"% (using training inputs/outputs without errors)");
   Print("The SVM accuracy is ",NormalizeDouble(t2,2),"% (using training inputs/outputs with errors)");
   deinitSVMachine();                       // Cleans up all of the memory used in generating the SVM to avoid memory leak
  }

Betik çalıştırıldığında, Uzman Günlüğünde aşağıdaki sonuçlar oluşur. 5000 eğitim noktası içeren bir eğitim veri kümesine 500 rastgele hata ekledik. Bu hata dolu destek vektör makinesinin performansını orijinali ile karşılaştırırken, performans yalnızca <%1 oranında azalır. Bunun nedeni, destek vektör makinesinin eğitim sırasında veri kümesindeki aykırı değerleri görmezden gelmesi ve buna rağmen true verilerin etkileyici derecede doğru bir modelini oluşturabilmesidir. Bu ise, destek vektör makinelerinin, potansiyel olarak gürültülü veri kümelerinden karmaşık kalıpları ve içgörüleri çıkarmada daha kullanışlı bir araç olabileceğini düşündürmektedir.

Uzman Günlüğü

Şekil 5. MetaTrader 5'te "Schnick" betiğinin çalıştırılmasının ardından ortaya çıkan uzman günlüğü.


Demo Sürümleri

Yukarıdaki kodun tam sürümü Code Base'den indirilebilir, ancak bu betik yalnızca Marketten Destek Vektör Makinesi Öğrenme aracının tam sürümünü satın aldıysanız terminalinizde çalıştırılabilir. Bu aracın yalnızca bir demo sürümünü indirdiyseniz, aracı strateji test cihazı aracılığıyla kullanabilirsiniz. Aracın demo sürümünü kullanarak "Schnick" kodunun test edilmesine izin vermek için, betiğin bir kopyasını strateji test cihazı kullanılarak dağıtılabilen bir Uzman Danışmana yeniden yazdım. Bu kod sürümlerinin her ikisi de aşağıdaki bağlantılardan indirilebilir:

  • Tam Sürüm - MetaTrader 5 terminalinde dağıtılan bir Betiği kullanma (Destek Vektör Makinesi Öğrenme Aracının satın alınmış bir sürümünü gerektirir)

  • Demo Sürümü - MetaTrader 5 strateji test cihazında dağıtılan bir Uzman Danışmanı kullanma(Destek Vektör Makinesi Öğrenme Aracının yalnızca bir demo sürümünü gerektirir)


Destek Vektör Makineleri Piyasada Nasıl Kullanılabilir?

Yukarıda tartışılan schnick örneği kuşkusuz oldukça basittir, ancak destek vektör makinelerini bu örnek ile teknik piyasa analizi için kullanmak arasında birkaç benzerlik gösterilebilir.

Teknik analiz, temel olarak gelecekteki fiyat hareketlerini tahmin etmek için geçmiş piyasa verilerini kullanmak ile ilgilidir. Schnick örneğinde de, aynı şekilde, yeni bir hayvanın schnick olup olmadığını tahmin etmek için bilim adamlarının geçmişte yaptığı gözlemleri kullanmıştık. Ayrıca piyasa, bir destek vektör makinesinin kullanımını ilginç bir konsept haline getiren gürültü, hatalar ve istatistiksel aykırı değerlerle doludur.

Çok sayıda teknik analiz alım satım yaklaşımının temeli aşağıdaki adımları içerir:

  1. Birkaç göstergeyi izleme
  2. Her gösterge için hangi koşulların potansiyel olarak başarılı bir alım satımla ilişkili olduğunu belirleme
  3. Göstergelerin her birini izleme ve hepsinin (veya çoğunun) ne zaman bir alım satım sinyali verdiğini değerlendirme

Yeni alım satımların sinyalini sağlamak için destek vektör makinelerini kullanmak üzere benzer bir yaklaşım benimsenmesi mümkündür. Destek vektörü makine öğrenme aracı bu düşünceyle geliştirilmiştir. Bu aracın nasıl kullanılacağına dair tam bir açıklama Markette bulunabilir, bu yüzden sadece hızlı bir genel bakış sunacağım. Bu aracı kullanma süreci aşağıdaki gibidir:

Blok Diyagram

Şekil 6. Bir Uzman Danışmanda destek vektör makinesi aracını uygulama sürecini gösteren blok diyagram

Destek Vektör Makinesi Öğrenme Aracını kullanmadan önce, eğitim girdi ve çıktılarının nasıl oluşturulduğunu anlamanız önemlidir.

Eğitim Girdileri Nasıl Oluşturulur?

Girdi olarak kullanmak istediğiniz göstergeler ve yeni destek vektör makineniz halihazırda başlatılmıştır. Sonraki adım, yeni destek vektör makinenize gösterge işleyicilerini aktarmak ve makineye eğitim verilerinin nasıl oluşturulacağına dair talimat vermektir. Bu ise, setIndicatorHandles() fonksiyonu çağrılarak yapılır. Bu fonksiyon, destek vektör makinesine başlatılmış göstergelerin işleyicilerini aktarmanıza olanak sağlar. Bu işlem, işleyicileri içeren bir tamsayı dizisini aktararak yapılır. Bu fonksiyon için diğer iki girdi uzaklık değeri ve veri noktalarının sayısıdır.

Uzaklık değeri, mevcut çubuk ile eğitim girdilerinin oluşturulmasında kullanılacak başlangıç ​​çubuğu arasındaki uzaklık değerini belirtir ve eğitim noktalarının sayısı (N ile belirtilir) eğitim verilerinizin boyutunu ayarlar. Aşağıdaki diyagram bu değerlerin nasıl kullanılacağını göstermektedir. 4 olan bir uzaklık değeri ve 6 olan bir N değeri, eğitim girdileri ve çıktıları oluşturmak için destek vektör makinesine yalnızca beyaz karede yakalanan çubukları kullanmasını söyleyecektir. Benzer şekilde, 8 olan bir uzaklık değeri ve 8 olan bir N değeri, eğitim girdileri ve çıktıları oluşturmak için destek vektör makinesine yalnızca mavi karede yakalanan çubukları kullanmasını söyleyecektir.

setIndicatorHandles() fonksiyonunu çağırdıktan sonra, genInputs() fonksiyonunu çağırmak mümkündür. Bu fonksiyon, eğitim için kullanılacak girdi verilerinin bir dizisini oluşturmak için aktarılan gösterge işleyicilerini kullanır.

Şekil 7. Uzaklık ve N değerlerini gösteren mum grafiği

Şekil 7. Uzaklık ve N değerlerini gösteren mum grafiği


Eğitim Çıktıları Nasıl Oluşturulur?

Eğitim çıktıları, varsayımsal alım satımların geçmiş fiyat verilerine dayalı olarak simüle edilmesi ve böyle bir alım satımın başarılı mı yoksa başarısız mı olacağının belirlenmesi yoluyla oluşturulur. Bunun için, destek vektör makinesi öğrenme aracına, varsayımsal bir alım satımın başarılı olarak mı yoksa başarısız olarak mı değerlendirileceğini öğretmek için kullanılan birkaç parametre vardır.

İlk değişken OP_TRADE'dir. Bunun değeri ALIŞ veya SATIŞ olabilir ve varsayımsal alış veya satış işlemlerine karşılık gelir. Bunun değeri ALIŞ ise, makine çıktıları oluştururken yalnızca varsayımsal alış işlemlerinin potansiyel başarısına bakacaktır. Alternatif olarak, bunun değeri SATIŞ ise, makine çıktıları oluştururken yalnızca varsayımsal satış işlemlerinin potansiyel başarısına bakacaktır.

Sonraki kullanılan değerler, bu varsayımsal alım satımlar için Zarar Durdur ve Kâr Al değerleridir. Değerler pip cinsinden ayarlanır ve varsayımsal alım satımlardan her biri için stop ve limit seviyelerini belirler.

Son parametre ise alım satım süresidir. Bu değişken saat cinsinden ölçülür ve yalnızca bu maksimum süre dahilinde tamamlanmış olan alım satımların başarılı sayılmasını sağlar. Bu değişkeni dahil etme nedeni, yavaş hareket eden yatay bir piyasada destek vektör makinesinin sinyal alım satımı yapmasını engellemektir.


Girdileri Seçerken Dikkat Edilecek Hususlar

Alım satımınızda destek vektör makinelerini uygularken girdi seçimine biraz kafa yormak önemlidir. Schnick örneğine benzer şekilde, farklı görülmeler arasında benzer olması beklenen bir girdinin seçilmesi önem taşımaktadır. Örneğin, girdi olarak hareketli bir ortalama kullanmak isteyebilirsiniz, ancak uzun vadede ortalama fiyat zaman içinde oldukça çarpıcı bir şekilde değişme eğiliminde olduğundan, tek başına hareketli bir ortalama, kullanacağınız en iyi girdi olmayabilir. Bunun nedeni, bugünkü hareketli ortalama değeri ile altı ay önceki hareketli ortalama değerleri arasında önemli bir benzerlik olmamasıdır.

EURUSD alım satımı yaptığımızı ve "alış" alım satım sinyali sağlamak için hareketli ortalama girdisine sahip bir destek vektör makinesi kullandığımızı varsayalım. Mevcut fiyatın 1,10 olduğunu varsayalım; ancak makine, fiyatın 0,55 olduğu altı ay önceki eğitim verilerini oluşturur. Destek vektör makinesini eğitirken, bulduğu model bir alım satımın yalnızca fiyat 0,55 civarında olduğunda bildirilmesine yol açabilir, çünkü bu bildiği tek veridir. Bu nedenle, destek vektör makineniz, fiyat 0,55'e düşene kadar hiçbir şekilde bir alım satım sinyali vermeyebilir.

Destek vektör makinesi için kullanılacak daha iyi bir girdi, bunun yerine bir MACD veya benzer bir osilatör olabilir, çünkü MACD'nin değeri ortalama fiyat seviyesinden bağımsızdır ve yalnızca göreceli hareketin sinyalini sağlar. Sizin için en iyi sonuçların ne ile elde edildiğini görmek için bunu denemenizi tavsiye ederim.

Girdileri seçerken dikkat edilecek bir diğer husus, yeni bir alım satım sinyali sağlamak için destek vektör makinesinin yeterli gösterge anlık görüntüsüne sahip olmasını sağlamaktır. Kendi alım satım tecrübenizde, bir MACD'nin yalnızca bakılacak son beş çubuğa sahip olduğunuzda faydalı olduğunu görebilirsiniz, çünkü bu bir trend gösterecektir. MACD'nin tek bir çubuğu, fiyatın yukarı mı yoksa aşağı mı gittiğini anlayamadığınız sürece, tek başına işe yaramayabilir. Bu nedenle, MACD göstergesinin son birkaç çubuğunu destek vektör makinesine aktarmak gerekebilir. Bunu yapmanızın iki olası yolu vardır:

  1. Bir trendi tek bir değer olarak hesaplamak için MACD göstergesinin son beş çubuğundan faydalanan yeni bir özel gösterge oluşturabilirsiniz. Bu özel gösterge destek vektör makinesine daha sonradan tek bir girdi olarak aktarılabilir; veya

  2. MACD göstergesinin önceki beş destek vektör makinesinde çubuğunu beş ayrı girdi olarak kullanabilirsiniz. Bunu yapmanın yolu, MACD göstergesinin beş farklı örneğini başlatmaktır. Göstergelerin her biri, mevcut çubuktan farklı bir uzaklık değeri ile başlatılabilir. Ayrı göstergelerden gelen beş işleyici destek vektör makinesine daha sonra aktarılabilir. 2. seçeneğin Uzman Danışmanınızın daha uzun sürede yürütülmesine neden olacağı unutulmamalıdır. Ne kadar çok girdiniz varsa, başarılı bir şekilde eğitmek o kadar uzun sürer.


Destek Vektör Makinelerini bir Uzman Danışmana Uygulama

Destek vektör makinelerinin kişisel alım satımda potansiyel olarak nasıl kullanabileceğine dair bir örnek olarak bir Uzman Danışman hazırladım (bunun bir kopyası şu bağlantıdan indirilebilir: https://www.mql5.com/en/ kodu/1229). Umarım Uzman Danışman, destek vektör makineleriyle biraz deneme yapmanıza olanak sağlar. Uzman Danışmanı kendi alım satım tarzınıza uygun olacak şekilde kopyalamanızı/değiştirmenizi/modifiye etmenizi tavsiye ederim. EA şu şekilde çalışır:

  1. svMachineTool kitaplığı kullanılarak iki yeni destek vektör makinesi oluşturulur. Biri yeni "Alış" işlemlerinin, diğeri ise yeni "Satış" işlemlerinin sinyalini sağlayacak şekilde ayarlanır.

  2. Bir tamsayı dizisinde saklanan işleyicilerinin her biri ile yedi standart gösterge başlatılır (Not: herhangi bir gösterge kombinasyonu girdi olarak kullanılabilir, sadece bunların SVM'ye tek bir tamsayı dizisinde aktarılması gerekir).

  3. Gösterge işleyicileri dizisi, yeni destek vektör makinelerine aktarılır.

  4. Gösterge işleyicileri dizisi ve diğer parametrelerin kullanılması ile, destek vektör makinelerinin eğitimi için kullanılacak doğru girdiler ve çıktılar oluşturmak için geçmiş fiyat verileri kullanılır.

  5. Tüm girdiler ve çıktılar oluşturulduktan sonra, her iki destek vektör makinesi de eğitilir.

  6. Eğitimli destek vektör makineleri, EA'da yeni "alış" ve "satış" işlemlerinin sinyalini sağlamak için kullanılır. Yeni bir "alış" veya "satış" işlemi sinyali sağlandığında, manuel Zarar Durdur ve Kâr Al emirleriyle birlikte alım satım açılır.

Destek vektör makinesinin başlatılması ve eğitilmesi onInit() fonksiyonu içinde yürütülür. svTrader EA'nın bu bölümü, referans amacıyla, aşağıda notlarla birlikte verilmiştir.

#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

#property indicator_buffers 7

//+---------Support Vector Machine Learning Tool Functions-----------+
//| The following #import statement imports all of the support vector
//| machine learning tool functions into the EA for use. Please note, if
//| you do not import the functions here, the compiler will not let you
//| use any of the functions
//+------------------------------------------------------------------+
#import "svMachineTool.ex5"
enum ENUM_TRADE {BUY,SELL};
enum ENUM_OPTION {OP_MEMORY,OP_MAXCYCLES,OP_TOLERANCE};
int  initSVMachine(void);
void setIndicatorHandles(int handle,int &indicatorHandles[],int offset,int N);
void setParameter(int handle,ENUM_OPTION option,double value);
bool genOutputs(int handle,ENUM_TRADE trade,int StopLoss,int TakeProfit,double duration);
bool genInputs(int handle);
bool setInputs(int handle,double &Inputs[],int nInputs);
bool setOutputs(int handle,bool &Outputs[]);
bool training(int handle);
bool classify(int handle);
bool classify(int handle,int offset);
bool classify(int handle,double &iput[]);
void  deinitSVMachine(void);
#import

#include <Trade\Trade.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\HistoryOrderInfo.mqh>

//+-----------------------Input Variables----------------------------+
input int            takeProfit=100;      // TakeProfit level measured in pips
input int            stopLoss=150;        // StopLoss level measured in pips
input double         hours=6;             // The maximum hypothetical trade duration for calculating training outputs.
input double         risk_exp=5;          // Maximum simultaneous order exposure to the market
input double         Tolerance_Value=0.1; // Error Tolerance value for training the SVM (default is 10%)
input int            N_DataPoints=100;    // The number of training points to generate and use.

//+---------------------Indicator Variables--------------------------+
//| Only the default indicator variables have been used here. I
//| recommend you play with these values to see if you get any 
//| better performance with your EA.                    
//+------------------------------------------------------------------+
int bears_period=13;
int bulls_period=13;
int ATR_period=13;
int mom_period=13;
int MACD_fast_period=12;
int MACD_slow_period=26;
int MACD_signal_period=9;
int Stoch_Kperiod=5;
int Stoch_Dperiod=3;
int Stoch_slowing=3;
int Force_period=13;

//+------------------Expert Advisor Variables------------------------+
int         tickets[];
bool        Opn_B,Opn_S;
datetime    New_Time;
int         handleB,handleS;
double      Vol=1;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   New_Time=0;
   int handles[];ArrayResize(handles,7);
//+------------------------------------------------------------------+
//| The following statements are used to initialize the indicators to be used for the support 
//| vector machine. The handles returned are stored to an int[] array. I have used standard 
//| indicators in this case however, you can also you custom indicators if desired
//+------------------------------------------------------------------+
   handles[0]=iBearsPower(Symbol(),0,bears_period);
   handles[1]=iBullsPower(Symbol(),0,bulls_period);
   handles[2]=iATR(Symbol(),0,ATR_period);
   handles[3]=iMomentum(Symbol(),0,mom_period,PRICE_TYPICAL);
   handles[4]=iMACD(Symbol(),0,MACD_fast_period,MACD_slow_period,MACD_signal_period,PRICE_TYPICAL);
   handles[5]=iStochastic(Symbol(),0,Stoch_Kperiod,Stoch_Dperiod,Stoch_slowing,MODE_SMA,STO_LOWHIGH);
   handles[6]=iForce(Symbol(),0,Force_period,MODE_SMA,VOLUME_TICK);

//----------Initialize, Setup and Training of the Buy-Signal support vector machine----------
   handleB=initSVMachine();                             // Initializes a new SVM and stores the handle to 'handleB'
   setIndicatorHandles(handleB,handles,0,N_DataPoints); // Passes the initialized indicators to the SVM with the desired offset 
                                                        // and number of data points
   setParameter(handleB,OP_TOLERANCE,Tolerance_Value);  // Sets the maximum error tolerance for SVM training
   genInputs(handleB);                                  // Generates inputs using the initialized indicators
   genOutputs(handleB,BUY,stopLoss,takeProfit,hours);   // Generates the outputs based on the desired parameters for taking hypothetical trades

//----------Initialize, Setup and Training of the Sell-Signal support vector machine----------
   handleS=initSVMachine();                             // Initializes a new SVM and stores the handle to 'handleS'
   setIndicatorHandles(handleS,handles,0,N_DataPoints); // Passes the initialized indicators to the SVM with the desired offset 
                                                        // and number of data points
   setParameter(handleS,OP_TOLERANCE,Tolerance_Value);  // Sets the maximum error tolerance for SVM training
   genInputs(handleS);                                  // Generates inputs using the initialized indicators
   genOutputs(handleS,SELL,stopLoss,takeProfit,hours);  // Generates the outputs based on the desired parameters for taking hypothetical trades
//----------
   training(handleB);   // Executes training on the Buy-Signal support vector machine
   training(handleS);   // Executes training on the Sell-Signal support vector machine   
   return(0);
  }


Gelişmiş Destek Vektör Makinesi Eğitimi

Daha ileri düzey kullanıcılar için destek vektör makinesi öğrenme aracına ek yetenekler eklenmiştir. Bu araç, kullanıcıların kendi özel girdi verilerini ve çıktı verilerini (Schnick örneğinde olduğu gibi) aktarmalarına olanak sağlar. Bu da, destek vektör makinesi girdileri ve çıktıları için kendi kriterlerinizi özel olarak tasarlamanıza ve bu verileri makineyi eğitmek için manuel olarak aktarmanıza olanak sağlar. Bu yöntem, destek vektör makinelerini herhangi bir alım satım alanında kullanma fırsatına kapı açar.

Destek vektör makineleri hem yeni alım satımların sinyalini sağlamak için kullanılır hem de alım satımların kapanışını, para yönetimini, yeni gelişmiş göstergeler vb. sinyalini sağlamak için kullanılabilir. Ancak, bu girdi ve çıktıların nasıl yapılandırılacağını anlamak hata almadığınızdan emin olmak adına önemlidir.

Girdiler: Girdiler, SVM'ye 1 boyutlu çift değerler dizisi olarak aktarılır. Oluşturduğunuz herhangi bir girdinin ikili değer olarak iletilmesi gerektiğini lütfen unutmayın. Boole, tamsayı vb. destek vektör makinesine aktarılmadan önce ikili değere dönüştürülmelidir. Girdilerin aşağıdaki biçimde olması gerekir. Örneğin, 3 girdi x 5 eğitim noktası olan girdileri aktardığımızı varsayalım. Bunun için, ikili dizimiz aşağıdaki biçimde 15 birim uzunluğunda olmalıdır:

| A1 | B1 | C1 | A2 | B2 | C2 | A3 | B3 | C3 | A4 | B4 | C4 | A5 | B5 | C5 |

Ayrıca girdi sayısı için de bir değer aktarmak gerekir. Bu durumda, N_Girdi=3.

Çıktılar: Çıktılar, bir Boole değerleri dizisi olarak aktarılır. Bu boole değerleri, aktarılan girdilerin kümelerinden her birine karşılık gelen SVM'nin istenilen çıktısıdır. Yukarıdaki örneğin ardından, 5 eğitim noktamız olduğunu varsayalım. Bu senaryoda, 5 birim uzunluğunda çıktı değerlerinin bir Boolean dizisini aktaracağız.

Genel Notlar:

  • Kendi girdi ve çıktılarınızı oluştururken dizilerinizin uzunluğunun aktardığınız değerler ile eşleştiğinden emin olun. Eşleşmezlerse, sizi tutarsızlığa dair bilgilendiren bir hata oluşturulacaktır. Örneğin, N_Girdi=3'ü aktardıysak ve girdiler, 16 olan bir dizi uzunluğundaysa bir hata verilecektir (çünkü 3 olan N_girdi değeri, herhangi bir girdi dizisinin uzunluğunun 3'ün katı olması gerektiği anlamına gelir). Benzer şekilde, aktardığınız girdilerin kümelerinin sayısı ile çıktıların sayısının eşit olduğundan emin olun. Yine, N_Girdi=3, giriş uzunluğu 15 ve çıkış uzunluğu 6 ise başka bir hata verilecektir (çünkü 5 küme girdiniz ve 6 çıktınız vardır).

  • Eğitim çıktılarınızda yeterli varyasyonunuz olduğunuzdan emin olmaya çalışın. Örneğin, 100 uzunluğunda bir çıktı dizisi anlamına gelen 100 eğitim noktası aktarırsanız ve tüm değerler yalnızca bir true ve geri kalanı false ise, bu durumda true durum ile false durum arasındaki fark yeterli olmayacaktır. Bu, SVM eğitiminin çok hızlı gerçekleştirilmesini sağlayacak, ancak nihai çözüm çok zayıf olacaktır. Daha çeşitli bir eğitim kümesi, genellikle daha etkili bir SVM'ye sebep olacaktır.

MetaQuotes Ltd tarafından İngilizceden çevrilmiştir.
Orijinal makale: https://www.mql5.com/en/articles/584

Ekli dosyalar |
schnick.mq5 (10.8 KB)
schnick_demo.mq5 (11.39 KB)
MQL5 Programlama Temelleri: Dizeler MQL5 Programlama Temelleri: Dizeler
Makale, MQL5'te dizelerle yapabileceğiniz her şeyi kapsar. Bu öncelikle acemi MQL5 programcılarının ilgisini çekecektir, ancak tecrübeli programcılar da bilgilerini özetleme ve sistematize etme fırsatına sahip olacaktır.
"Çalışma Sırasında" Kullanıcı Panelinden Uzman Danışman Parametrelerini Değiştirme "Çalışma Sırasında" Kullanıcı Panelinden Uzman Danışman Parametrelerini Değiştirme
Bu makale, bir Uzman Danışman uygulamasını gösteren küçük bir örnek sunar, bunun parametreleri kullanıcı panelinden kontrol edilebilir. Uzman Danışman, parametreleri "çalışma sırasında" değiştirirken, dosyadan daha fazla okumak ve bunları panelde uygun şekilde görüntülemek için bilgi panelinden alınan değerleri bir dosyaya yazar. Bu makale, manuel veya yarı otomatik modda alım satım yapanların dikkatini çekebilir.
Satın Almadan Önce Bir Alım Satım Robotu Nasıl Test Edilir? Satın Almadan Önce Bir Alım Satım Robotu Nasıl Test Edilir?
MQL5 Markette bir alım satım robotu satın almanın diğer tüm benzer seçeneklere göre açık bir avantajı vardır: Sunulan otomatik sistem MetaTrader 5 terminalinde doğrudan kapsamlı bir şekilde test edilebilir. Bir Uzman Danışman, satın alımdan önce, sistemi tam olarak kavramak için yerleşik Strateji Test Cihazındaki tüm olumsuz modlarda dikkatli bir şekilde çalıştırılabilir ve çalıştırılmalıdır.
MQL5 Programlama Temelleri: Diziler MQL5 Programlama Temelleri: Diziler
Diziler, değişkenler ve fonksiyonlar ile birlikte, hemen hemen tüm programlama dillerinin entegre bir parçasıdır. Bu makale öncelikle acemi MQL5 programcılarının ilgisini çekecektir, ancak tecrübeli programcılar da bilgilerini özetleme ve sistematize etme fırsatına sahip olacaktır.