//+------------------------------------------------------------------+
//| NormalDistributionExample.mq5 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2000-2024, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
//--- normal dağılımı hesaplayan fonksiyonları dahil et
#include <Math\Stat\Normal.mqh>
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- normal dağılım için parametreleri ayarla
double mu=5.0;
double sigma=1.0;
PrintFormat("mu=%G ve sigma=%G parametrelerine sahip normal dağılım, hesaplama örnekleri:",mu,sigma);
//--- aralığı ayarla
double x1=mu-sigma;
double x2=mu+sigma;
//--- olasılık hesabı için kullanılacak değişkenler
double cdf1,cdf2,probability;
//--- hata kodu değişkenleri
int error_code1,error_code2;
//--- dağılım fonksiyonlarının değerlerini hesapla
cdf1=MathCumulativeDistributionNormal(x1,mu,sigma,error_code1);
cdf2=MathCumulativeDistributionNormal(x2,mu,sigma,error_code2);
//--- hata kodlarını kontrol et
if(error_code1==ERR_OK && error_code2==ERR_OK)
{
//--- belli aralıktaki rassal değişkenin olasılığını hesapla
probability=cdf2-cdf1;
//--- sonucu çıktıla
PrintFormat("1. %.5f<x<%.5f aralığında, rassal değişkenin olasılığını hesapla",x1,x2);
PrintFormat(" Cevap: Olasılık = %5.8f",probability);
}
//--- 95% güven aralığı için, rassal x değişkeninin yer aldığı aralığı hesapla
probability=0.95; // güven olasılığını hesapla
//--- aralık sınırlarındaki olasılıkları ayarla
double p1=(1.0-probability)*0.5;
double p2=probability+(1.0-probability)*0.5;
//--- aralık sınırlarını hesapla
x1=MathQuantileNormal(p1,mu,sigma,error_code1);
x2=MathQuantileNormal(p2,mu,sigma,error_code2);
//--- hata kodlarını kontrol et
if(error_code1==ERR_OK && error_code2==ERR_OK)
{
//--- sonucu çıktıla
PrintFormat("2. Güven düzeyi = %.2f için, rassal değişkenin aralığını hesapla",probability);
PrintFormat(" Cevap: aralık %5.8f <= x <=%5.8f",x1,x2);
}
PrintFormat("3. Dağılımın ilk dört momentinin teorik sayısal değerlerini hesapla");
//--- Bir rassal değişken dizisi oluştur, ilk dört momenti hesapla ve teorik değerlerle karşılaştır
int data_count=1000000; // değerlerin sayısını ayarla ve diziyi hazırla
double data[];
ArrayResize(data,data_count);
//--- rassal değerler oluştur ve diziye doldur
for(int i=0; i<data_count; i++)
{
data[i]=MathRandomNormal(mu,sigma,error_code1);
}
//--- hesaplama için başlangıç indisini ve veri miktarını ayarla
int start=0;
int count=data_count;
//--- oluşturulan değerlerin ilk dört momentini hesapla
double mean=MathMean(data,start,count);
double variance=MathVariance(data,start,count);
double skewness=MathSkewness(data,start,count);
double kurtosis=MathKurtosis(data,start,count);
//--- teorik momentler için kullanılacak değişkenler
double normal_mean=0;
double normal_variance=0;
double normal_skewness=0;
double normal_kurtosis=0;
//--- hesaplanan momentlerin değerlerini göster
PrintFormat(" Ortalama Varyans Çarpıklık Basıklık");
PrintFormat("Hesaplanan %.10f %.10f %.10f %.10f",mean,variance,skewness,kurtosis);
//--- ilk dört momentin teorik değerlerini hesapla ve elde edilen değerlerle karşılaştır
if(MathMomentsNormal(mu,sigma,normal_mean,normal_variance,normal_skewness,normal_kurtosis,error_code1))
{
PrintFormat("Teorik %.10f %.10f %.10f %.10f",normal_mean,normal_variance,normal_skewness,normal_kurtosis);
PrintFormat("Fark %.10f %.10f %.10f %.10f",mean-normal_mean,variance-normal_variance,skewness-normal_skewness,kurtosis-normal_kurtosis);
}
}
|