MQL 4 Programcıları için Sorular ve Cevaplar - sayfa 4

 

Şimdilik, aynen şöyle:

//+------------------------------------------- --------------------+

//| Fibo.mq4 ticareti |

//| Minodi |

//| minodi@yandex.ru |

//+------------------------------------------- --------------------+

# mülkiyet telif hakkı "Minodi"

#özellik bağlantısı "minodi@yandex.ru"


harici int period_EMA = 233,

period_SMA = 233,

kaybı durdur = 30,

harici çift Parti = 0.01;

dış dize SesEnd ="22:00"; // yüksek veya düşük için sınır zamanı

//+------------------------------------------- --------------------+

//| komut dosyası programı başlatma işlevi |

//+------------------------------------------- --------------------+

int başlangıç()

{

//-------Günlük fiyatlar, Fib ve Hi-Lo çekme süresi--------------+

int kaydırma = iBarShift(NULL,1440,Zaman[0]) + 1;

çift yüksek fiyat = iYüksek(NULL,1440,shift); // yüksek fiyat

çift LoPrice =iLow(NULL,1440,shift); // Düşük fiyat

çift OpPrice =iOpen(NULL,1440,shift); // açık fiyat

çift ClFiyat = iClose(NULL,1440,shift); // fiyatı kapat

tarihsaat StTime = iTime(NULL,1440,shift); // ??

if(TimeDayOfWeek(StTime)==0/*Pazar*/)

{//Cuma günlerini en yüksek ve en düşük olarak ekleyin

HiPrice = MathMax(HiPrice,iHigh(NULL,1440,shift+1));

LoPrice = MathMin(LoPrice,iLow(NULL,1440,shift+1));

OpPrice = iOpen(NULL,1440,shift+1);

ClPrice = iClose(NULL,1440,shift+1);

}

double Pivot =(HiPrice+LoPrice+ClPrice)/3;

double Range=HiPrice-LoPrice;

çift Fibo138 =1.382*Aralık+LoFiyat;

çift Fibo162 =1.618*Aralık+LoFiyat;

double Fibo_138 =LoFiyat-(1.382*Aralık-Aralık);

double Fibo_162 =LoFiyat-(1.618*Aralık-Aralık);

//----------------yüksek ve düşük zaman---------------------- ------ -------+

int HiTime,LoTime;

int zaman; // sonraki çubukta değerleri devre dışı bırak


if (zaman!=Zaman[0]){HiTime=0;LoTime=0;time=Zaman[0];}

if (Yüksek[0]>HiPrice)HiTime=TimeCurrent();

if (Low[0]<LoPrice)LoTime=TimeCurrent();


Comment("Bu çubukta:"+"\n Yüksek Zaman Noktası="+HiTime+"\n Düşük Zaman Noktası="+LoTime);

//-----------------Demark fiyat aralığı---------------------- ---+

int currDay, i=0; //

if (currDay!=ZamanGünü(Zaman[i]))

{

if (ClPrice<OpPrice) double x=(HiPrice + LoPrice + ClPrice + LoPrice)/2;

if (ClPrice>OpPrice) x=(HiPrice + LoPrice + ClPrice + HiPrice)/2;

if (ClPrice==OpPrice) x=(HiPrice + LoPrice + ClPrice + ClPrice)/2;

ben++;

}

çift MaxDay = x - LoPrice; // Demark fiyat aralığı

çift MinDay = x - HiPrice; // Demark fiyat aralığı

// -----------Hareketli ortalamalar----------------------------------- ----------+

çift EMA = iMA(15,0,period_EMA,0,MODE_EMA, PRICE_CLOSE,0);

çift SMA = iMA(15,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0);

double EMA1 = iMA(60,0,period_EMA,0,MODE_EMA, PRICE_CLOSE,0);

double SMA1 = iMA(60,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0);

//----------------Dün siparişlerin silinmesi-------------------------- ----+

//------------------Siparişler-------------------------- ------ -----------------+

 

Sevgili forum kullanıcıları, kodu kontrol edin, yavaş yavaş eklemeyi planlıyorum

 

Başlamadan önce verdiğim parametreler bunlar


int HiTime,LoTime;

int time; // на следующем баре обнкляем значения

 
Merhaba sevgili programcılar ! Yeni başlayan birine, mümkünse bir komut dosyasını (Uzman Danışman değil) nasıl yazacağını söyleyin, böylece bir ticaret emri verir ve aynı zamanda bunun için Takip Eden Durdurma işlevini minimum düzeyde açar. Belki hazır bir tane var, o zaman mümkünse - bir bağlantı.
 
Vladon >> :

Başlamadan önce verdiğim parametreler bunlar


int HiTime,LoTime;

int time; // на следующем баре обнкляем значения


Etkilenmiş. Diğer her şey normal mi?
 

Değerli forum kullanıcıları, dikkatinizi verin ve yapılan hataları anlatın:

//+------------------------------------------- --------------------+

//| Fibo.mq4 ticareti |

//| Minodi |

//| minodi@yandex.ru |

//+------------------------------------------- --------------------+

# mülkiyet telif hakkı "Minodi"

#özellik bağlantısı "minodi@yandex.ru"


harici int period_EMA = 233,

period_SMA = 233,

kaybı durdur = 30,

Büyü = 55;

harici çift Parti = 0.01;

dış dize SesEnd ="22:00"; // yüksek veya düşük için sınır zamanı


int HiTime,LoTime;

int zaman; // sonraki çubukta değerleri devre dışı bırak


//+------------------------------------------- --------------------+

//| komut dosyası programı başlatma işlevi |

//+------------------------------------------- --------------------+

int başlangıç()

{

//-------Günlük fiyatlar, Fib ve Hi-Lo çekme süresi--------------+

int kaydırma = iBarShift(NULL,1440,Zaman[0]) + 1;

çift yüksek fiyat = iYüksek(NULL,1440,shift); // yüksek fiyat

çift LoPrice =iLow(NULL,1440,shift); // Düşük fiyat

çift OpPrice =iOpen(NULL,1440,shift); // açık fiyat

çift ClFiyat = iClose(NULL,1440,shift); // fiyatı kapat

tarihsaat StTime = iTime(NULL,1440,shift); // ??

if(TimeDayOfWeek(StTime)==0/*Pazar*/)

{//Cuma günlerini en yüksek ve en düşük olarak ekleyin

HiPrice = MathMax(HiPrice,iHigh(NULL,1440,shift+1));

LoPrice = MathMin(LoPrice,iLow(NULL,1440,shift+1));

OpPrice = iOpen(NULL,1440,shift+1);

ClPrice = iClose(NULL,1440,shift+1);

}

double Pivot =(HiPrice+LoPrice+ClPrice)/3;

double Range=HiPrice-LoPrice;

çift Fibo138 =1.382*Aralık;

çift Fibo162 =1.618*Aralık;

double Fibo_138 =(LoPrice-1.382*Aralık)-Aralık;

double Fibo_162 =(LoPrice-1.618*Aralık)-Aralık;

//----------------yüksek ve düşük zaman---------------------- ------ -------+


if (zaman!=Zaman[0]){HiTime=0;LoTime=0;time=Zaman[0];}

if (Yüksek[0]>HiPrice)HiTime=TimeCurrent();

if (Low[0]<LoPrice)LoTime=TimeCurrent();


Comment("Bu çubukta:"+"\n Yüksek Zaman Noktası="+HiTime+"\n Düşük Zaman Noktası="+LoTime);

//-----------------Demark fiyat aralığı---------------------- ---+

int currDay, i=0; //

if (currDay!=ZamanGünü(Zaman[i]))

{

if (ClPrice<OpPrice) double x=(HiPrice + LoPrice + ClPrice + LoPrice)/2;

if (ClPrice>OpPrice) x=(HiPrice + LoPrice + ClPrice + HiPrice)/2;

if (ClPrice==OpPrice) x=(HiPrice + LoPrice + ClPrice + ClPrice)/2;

ben++;

}

çift MaxDay = x - LoPrice; // Demark fiyat aralığı

çift MinDay = x - HiPrice; // Demark fiyat aralığı

// -----------Hareketli ortalamalar----------------------------------- ----------+

çift EMA = iMA(15,0,period_EMA,0,MODE_EMA, PRICE_CLOSE,0);

çift SMA = iMA(15,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0);

double EMA1 = iMA(60,0,period_EMA,0,MODE_EMA, PRICE_CLOSE,0);

double SMA1 = iMA(60,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0);

//------------------Siparişler-------------------------- ------ -----------------+

if (HiTime>LoTime){

int bilet1 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,HiPrice,0,0,Pivot,NULL,Magic,58000,Red);

int bilet2 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,HiPrice,0,0,LoPrice,NULL,Magic,58000,Red);

int bilet3 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo138,0,0,HiPrice,NULL,Magic,58000,Red);

int bilet4 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo138,0,0,LoPrice,NULL,Magic,58000,Red);

int bilet5 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo162,0,0,HiPrice,NULL,Magic,58000,Red);

int bilet6 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo162,0,0,Pivot,NULL,Magic,58000,Red);

}

if (HiTime<LoTime){

int bilet7=OrderSend(Symbol(),OP_BUYLIMIT,Lot,LoPrice,0,0,Pivot,NULL,Magic,58000,Red);

int bilet8=OrderSend(Symbol(),OP_BUYLIMIT,Lot,LoPrice,0,0,HiPrice,NULL,Magic,58000,Red);

int bilet9=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_138,0,0,LoPrice,NULL,Magic,58000,Red);

int bilet10=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_138,0,0,Pivot,NULL,Magic,58000,Red);

int bilet11=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_162,0,0,LoPrice,NULL,Magic,58000,Red);

int bilet12=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_162,0,0,Pivot,NULL,Magic,58000,Red);

}

if (HiTime>LoTime && ClPrice>Pivot) {

int bilet13=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Pivot,0,0,HiPrice,NULL,Magic,58000,Red);

int bilet14=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Pivot,0,0,Fibo138,NULL,Magic,58000,Red);

}

if (HiTime<LoTime && ClPrice<Pivot)

int bilet15=OrderSend(Symbol(),OP_SELLLIMIT,Lot,Pivot,0,0,LoPrice,NULL,Magic,58000,Red);

int bilet16=OrderSend(Symbol(),OP_SELLLIMIT,Lot,Pivot,0,0,Fibo_138,NULL,Magic,58000,Red);

}

dönüş(0);


//+------------------------------------------- --------------------+


 

ilk bakışta parametreleri çıkardım:

int currDay;


başlangıç için

 
Durakları unuttum, 30 pp koydum
 
Hataları belirtin, kodun çalışmasını istiyorum
 

Forumun beyleri, çözmeme yardım edin ....

İşte kodun bir kısmı (düzenli bir Uzman Danışman oluşturmaya ilişkin eğitimdeki ana damat kodu)

// Sipariş muhasebesi fonksiyonu
// Genel değişkenler:
// Mas_Ord_New[31][9] // Bilinen son sipariş dizisi
// Mas_Ord_Old[31][9] // Önceki (eski) siparişler dizisi
// 1. dizin = sipariş seri numarası
// [][0] tanımlı değil
// [][1] açık oran siparişler (mutlak döviz kuru)
// [][2] Emrin StopLoss'u (oranın mutlak değeri)
// [][3] TakeProfit emirleri (oranın mutlak değeri)
// [][4] sipariş numarası
// [][5] say. çok ord. (mutlak döviz kuru)
// [][6] sipariş türü. 0=B,1=S,2=BL,3=SL,4=BS,5=SS
// [][7] sihirli numarayı sipariş et
// [][8] 0/1 bir yorum olduğu gerçeği

if (Mas_Ord_Old[old][6]==0 && Bid>Mas_Ord_Old[old][2] && Bid<Mas_Ord_Old[old][3])
Inform(1, Mas_Ord_Old[eski][4]); // Satın alma emri bir karşı sinyal ile kapatılır.
else if (Mas_Ord_Old[old][6]==0 && Bid<=Mas_Ord_Old[old][2])
Inform(19,Mas_Ord_Old[eski][4],Mas_Ord_Old[eski][2]); // SL'nin çalıştığı anlamına gelir
else if (Mas_Ord_Old[old][6]==0 && Bid>=Mas_Ord_Old[old][3])
Inform(20,Mas_Ord_Old[eski][4],Mas_Ord_Old[eski][3]); // TP çalıştı

else if (Mas_Ord_Old[old][6]==1 && Ask<Mas_Ord_Old[old][2] && Ask>Mas_Ord_Old[old][3])
Inform(2, Mas_Ord_Old[eski][4]); // Yani Satış emri ters bir sinyalle kapatılır
else if (Mas_Ord_Old[old][6]==1 && Ask>=Mas_Ord_Old[old][2])
Inform(19,Mas_Ord_Old[eski][4],Mas_Ord_Old[eski][2]); // SL'nin çalıştığı anlamına gelir
else if (Mas_Ord_Old[old][6]==1 && Ask<=Mas_Ord_Old[old][3])
Inform(20,Mas_Ord_Old[eski][4],Mas_Ord_Old[eski][3]); // TP çalıştı

Gerisi kimseyi ilgilendirmez...

Sorun: Vakaların %90'ında doğru parametre görüntüleniyor mu? yani SL çalıştıysa, "19" parametresi çıkışta, TP - "20" ise, sipariş manuel olarak veya ters bir sinyalle kapatılırsa, "1" veya "2". Böyle amaçlanıyordu...

Ve bazen (oldukça sık), "20" yerine "19" (veya tam tersi) ve hatta "1" ("2") verir. Lütfen "eğer" işlevini doğru bir şekilde tanımlamaya yardımcı olun: siparişleri kapatma nedenlerini tetikleme koşulları olarak.

Sanırım nedeni fiyatların yuvarlanması olabilir mi?