Nasıl kodlanır? - sayfa 151

 
luxinterior:
OrderReliable içerme dosyasını kullanın. Lüks

OrderSendReliable işlevi için bu konuda biraz eksik gibi görünüyor, daha sonraki bir sürümünüz var mı?

 

Hesaplamalarda Zaman nasıl kullanılır?

MQL4'te yeniyim ve bazı temel işlevleri kullanacak basit bir EA yapıp yapamayacağımı görmeye çalışıyordum. C++'ı iyi biliyorum ama MQL4'te berbat olmalı çünkü bu kodla ilgili bir şey yıpranmış durumda ve bunun zaman işlevleriyle veya muhtemelen satın alma/satma işlevleriyle ilgisi olduğunu düşünüyorum, işte kod: ... ve bu arada bu değildi para kazanmak için tasarlandı sadece fonksiyonları test edin Teşekkürler!

int başlangıç()

{

//----

çift akımzamanN, akımdeğeri;

double timeM = TimeMinute (TimeCurrent());

double timeH = TimeHour(TimeCurrent());

currenttimeN = (timeH / 24) + (timeM / 1440);//günün saatini yüzde veya 1 (1 = bir tam gün) olarak verir, bu nedenle her zaman 1'den küçüktür

akımdeğeri = Sor;

if (currentvalue > currenttimeN){

OrderSend(Symbol(),OP_SELL,1,Sor,3,Sor-25*Puan,Sor+25*Puan,"Siparişim #2",16384,0,Yeşil);

}

/* SATIN AL KOMUTU */

else if (currentvalue <currenttimeN){

OrderSend(Symbol(),OP_BUY,1,Sor,3,Sor-25*Puan,Sor+25*Puan,"Siparişim #2",16384,0,Yeşil);

}

//----

dönüş(0);

}

 

...................

 

Yanlış dize:

currenttimeN = (timeH / 24) + (timeM / 1440);//gives the time of day as a percent or 1 (1 = one complete day) so always less than 1[/CODE]

could be:

[CODE]currenttimeN = (timeH *60 + timeM) / 1440;

Gün ve fiyatın bir kısmını nasıl karşılaştırabilirsiniz?

 

aynı anda al ve sat

Birisi programlamaya yardımcı olabilir, böylece aynı anda alıp satabilirim ... bazı komut dosyaları vb.

Bunu takdir ediyorum...

misal:

if (Stoch1>=Stoch2)

{

bilet=OrderSend(Symbol(), OP_BUY, Lot, Ask, 3, Ask-Stoploss*Puan, Ask+TakeProfit*Puan, "-", 0, 0, Yeşil);

bilet=OrderSend(Symbol(), OP_SELL, Lot, Bid, 3, Ask-Stoploss*Point, Bid-TakeProfit*Point,"-", 0, 0, Kırmızı);

}

sorun şu ki sadece satın alacak..ama her iki emri de yerine getirmek için yaptım...teşekkürler..

 
kk81:
Birisi programlamaya yardımcı olabilir, böylece aynı anda alıp satabilirim ... bazı komut dosyaları vb.

Bunu takdir ediyorum...

misal:

eğer (Stoch1>=Stoch2)

{

bilet=OrderSend(Symbol(), OP_BUY, Lot, Ask, 3, Ask-Stoploss*Puan, Ask+TakeProfit*Puan, "-", 0, 0, Yeşil);

bilet=OrderSend(Symbol(), OP_SELL, Lot, Bid, 3, Ask-Stoploss*Point, Bid-TakeProfit*Point, "-", 0, 0, Kırmızı);

}

sorun şu ki sadece satın alacak..ama her iki emri de yerine getirmek için yaptım...teşekkürler..

https://www.mql5.com/en/forum/177583/page37

 

OrderClose iade fiyatı nasıl alınır?

Siparişin hangi fiyattan kapatıldığını bilmek istiyorum

Dosyalar:
closeorder.jpg  62 kb
 

Forex özgürlük çubuğu

merhaba

tüm arkadaşlara çok teşekkürler, özellikle Roger09

Uzman (otomatik ticaret) ForexFreedomBars istiyorum.

kare 5m , 15m ,30m ,1H Kırmızı olduğunda, siparişinizi 10-20 TP ile SATIN gönderin

kare 5m, 15m, 30m, 1H Mavi olduğunda, sipariş gönderin 10-20 TP ile SATIN AL

(TP, SL , lot, maxtrade) yeteneği değişmeli

Bana yardım edin lütfen .

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

//| #Forex Özgürlük Çubukları

//|

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

#property telif hakkı "Eli hayun tarafından programlanmıştır"

#özellik göstergesi_separate_window

#özellik göstergesi_minimum -0.5

//#özellik göstergesi_maksimum 5

#özellik göstergesi_tamponları 8

#özellik göstergesi_renk1 Kırmızı

#özellik göstergesi_renk2 DodgerBlue

#özellik göstergesi_color3 Kırmızı

#özellik göstergesi_renk4 DodgerBlue

#özellik göstergesi_renk5 Kırmızı

#özellik göstergesi_renk6 DodgerBlue

#özellik göstergesi_color7 Kırmızı

#özellik göstergesi_color8 DodgerBlue

//---- arabellekler

çift buf4_up[];

çift buf4_down[];

çift buf3_up[];

çift buf3_down[];

çift buf2_up[];

çift buf2_down[];

çift buf1_up[];

çift buf1_down[];

dış çift Boşluk = 1; // Çubuk satırları arasındaki boşluk

extern int Dönem_1 = PERIOD_M5;//M15

extern int Period_2 = PERIOD_M15;//M30

extern int Period_3 = PERIOD_M30;//H1

extern int Period_4 = PERIOD_H1;//H4

harici int cci_1 = 2;//50

harici int cci_2 = 2;//14

harici int cci_3 = 2;

harici int cci_4 = 2;

harici int StopLoss=100;

harici int TakeProfit=100;

dış çift Lot = 0.1;

extern bool Otomatik Görüntüleme = yanlış;

string kısa isim = "";

bool ilkZaman = doğru;

int BenzersizSayı = 228;

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

//| Özel gösterge başlatma işlevi |

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

int init()

{

SetAutoDisplay();

shortname = "# Forex Freedom("+Period_1+","+Period_2+","+Period_3+","+Period_4+");

ilkZaman = doğru;

GöstergeKısaAdı(kısa isim);

//---- göstergeler

SetIndexStyle(0,DRAW_ARROW);

SetIndexArrow(0,110);

SetIndexBuffer(0,buf4_up);

SetIndexEmptyValue(0,0.0);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(1.110);

SetIndexBuffer(1,buf4_down);

SetIndexEmptyValue(1,0.0);

SetIndexStyle(2,DRAW_OK);

SetIndexArrow(2.110);

SetIndexBuffer(2,buf3_up);

SetIndexEmptyValue(2,0.0);

SetIndexStyle(3,DRAW_OK);

SetIndexArrow(3,110);

SetIndexBuffer(3,buf3_down);

SetIndexEmptyValue(3,0.0);

SetIndexStyle(4,DRAW_ARROW);

SetIndexArrow(4,110);

SetIndexBuffer(4,buf2_up);

SetIndexEmptyValue(4,0.0);

SetIndexStyle(5,DRAW_OK);

SetIndexArrow(5,110);

SetIndexBuffer(5,buf2_down);

SetIndexEmptyValue(5,0.0);

SetIndexStyle(6,DRAW_OK);

SetIndexArrow(6,110);

SetIndexBuffer(6,buf1_up);

SetIndexEmptyValue(6,0.0);

SetIndexStyle(7,DRAW_OK);

SetIndexArrow(7,110);

SetIndexBuffer(7,buf1_down);

SetIndexEmptyValue(7,0.0);

//----

dönüş(0);

}

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

//| Özel gösterge sıfırlama işlevi |

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

int tanım()

{

//----

SetAutoDisplay();

shortname = "# Forex Freedom("+Period_1+","+Period_2+","+Period_3+","+Period_4+");

ilkZaman = doğru;

//----

dönüş(0);

}

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

//| Özel gösterge yineleme işlevi |

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

int başlangıç()

{

int counted_bars=IndicatorCounted();

int i=0, y5m=0, y1h=0, y30m=0, y15m=0, yy;

int limit=Barlar-sayılan_barlar;

datetime TimeArray_1H[], TimeArray_30M[], TimeArray_15M[], TimeArray_5M[];

//----

if (ilk Kez || NewBar())

{

ilkZaman = yanlış;

int win = UniqueNum; // WindowFind(kısa isim);

double dif = Zaman[0] - Zaman[1];

for (int ii=ObjectsTotal()-1; ii>-1; ii--)

{

if (StringFind(ObjectName(ii),"FF_"+win+"_") >= 0)

ObjectDelete(NesneAdı(ii));

başka

ii=-1;

}

çift vardiya = 0.2;

(ii=0; ii<4; ii++) için

{

string txt = "??";

çift gp;

anahtar (ii)

{

durum 0: txt = tf2txt(Period_1); gp = 1 + vardiya; kırmak;

durum 1: txt = tf2txt(Period_2); gp = 1 + Boşluk + vardiya; kırmak;

durum 2: txt = tf2txt(Period_3); gp = 1 + Boşluk*2 + vardiya; kırmak;

durum 3: txt = tf2txt(Period_4); gp = 1 + Boşluk*3 + vardiya; kırmak;

}

dize adı = "FF_"+win+"_"+ii+"_"+txt;

ObjectCreate(ad, OBJ_TEXT, WindowFind(shortname), iTime(NULL,0,0)+dif*3, gp);

ObjectSetText(isim, txt,8,"Arial", Gümüş);

}

}

ArrayCopySeries(TimeArray_1H,MODE_TIME,Symbol(),Period_4);

ArrayCopySeries(TimeArray_30M,MODE_TIME,Symbol(),Period_3);

ArrayCopySeries(TimeArray_15M,MODE_TIME,Symbol(),Period_2);

ArrayCopySeries(TimeArray_5M,MODE_TIME,Symbol(),Period_1);

for(i=0, y5m=0, y1h=0, y30m=0, y15m=0;i<limit;i++)

{

if (Zaman<ZamanArray_5A[y5m]) y5m++;

if (Zaman<TimeArray_1H[y1h]) y1h++;

if (Zaman<ZamanArray_30A[y30m]) y30m++;

if (Zaman<ZamanArray_15M[y15m]) y15m++;

int cci_n = cci_1;

için (int tf = 0; tf < 4; tf++)

{

int prd;

geçiş (tf)

{

durum 0: prd = Dönem_1; cci_n = cci_1; yy = y5m; kırmak;

durum 1: prd = Dönem_2; cci_n = cci_2; yy = y15m; kırmak;

durum 2: prd = Period_3; cci_n = cci_3; yy = y30m; kırmak;

durum 3: prd = Dönem_4; cci_n = cci_4; yy = y1h; kırmak;

}

double cci = iCCI(NULL, prd, cci_n,PRICE_TYPICAL, yy);

çift dUp = EMPTY_VALUE; // iCustom(NULL, prd, "SüperTrend", false, 1, yy);

çift dDn = EMPTY_VALUE; //iCustom(NULL, prd, "SüperTrend", false, 0, yy);

if (cci < 0) dUp = 1; başka dDn = 1;

geçiş (tf)

{

durum 0: if (dUp == EMPTY_VALUE) buf1_down = 1; başka buf1_up = 1; kırmak;

durum 1: if (dUp == EMPTY_VALUE) buf2_down = 1 + Boşluk * 1; else buf2_up = 1 + Boşluk * 1; kırmak;

durum 2: if (dUp == EMPTY_VALUE) buf3_down = 1 + Boşluk * 2; else buf3_up = 1 + Boşluk * 2; kırmak;

durum 3: if (dUp == EMPTY_VALUE) buf4_down = 1 + Boşluk * 3; else buf4_up = 1 + Boşluk * 3; kırmak;

}

eğer (NewBar())

{

string sDir = "";

if (buf1_up[0] + buf2_up[0] + buf3_up[0] + buf4_up[0] == 4)

sDir = "Yukarı";

if (buf1_down[0] + buf2_down[0] + buf3_down[0] + buf4_down[0] == 4)

sDir = "Aşağı";

if (sDir != "")

{

PlaySound("alert1.wav");

Print("Forex otoyolu - Yön",sDir);

}

}

}

}

if (buf1_up[0] + buf2_up[0] + buf3_up[0] + buf4_up[0] == 4)

OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss ,TakeProfit); başka

dönüş(0);

}

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

dizi tf2txt(int tf)

{

if (tf == PERIOD_M1) return("M1");

if (tf == PERIOD_M5) return("M5");

if (tf == PERIOD_M15) return("M15");

if (tf == PERIOD_M30) return("M30");

if (tf == PERIOD_H1) return("H1");

if (tf == PERIOD_H4) return("H4");

if (tf == PERIOD_D1) return("D1");

if (tf == PERIOD_W1) return("W1");

if (tf == PERIOD_MN1) return("MN1");

dönüş("??");

}

void SetValues(int p1, int p2, int p3, int p4)

{

Dönem_1 = p1; Dönem_2 = p2; Dönem_3 = p3; Dönem_4 = p4;

}

geçersiz SetAutoDisplay()

{

if (Otomatik Görüntüleme)

{

geçiş (Dönem())

{

durum PERIOD_M1 : Değerleri Ayarla(PERIOD_M1, PERIOD_M5, PERIOD_M15,PERIOD_M30); kırmak;

durum PERIOD_M5 : Değerleri Ayarla(PERIOD_M5, PERIOD_M15,PERIOD_M30,PERIOD_H1); kırmak;

durum PERIOD_M15 : Değerleri Ayarla(PERIOD_M5, PERIOD_M15,PERIOD_M30,PERIOD_H1); kırmak;

durum PERIOD_M30 : Değerleri Ayarla(PERIOD_M5, PERIOD_M15,PERIOD_M30,PERIOD_H1); kırmak;

durum PERIOD_H1 : Değerleri Ayarla(PERIOD_M15, PERIOD_M30,PERIOD_H1, PERIOD_H4); kırmak;

durum PERIOD_H4 : Değerleri Ayarla(PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1); kırmak;

durum PERIOD_D1 : SetValues(PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1); kırmak;

durum PERIOD_W1 : Değerleri Ayarla(PERIOD_H4, PERIOD_D1, PERIOD_W1,PERIOD_MN1); kırmak;

durum PERIOD_MN1 : Değerleri Ayarla(PERIOD_H4, PERIOD_D1, PERIOD_W1,PERIOD_MN1); kırmak;

}

}

}

bool NewBar()

{

statik tarihsaat dt = 0;

if (Zaman[0] != dt)

{

dt = Zaman[0];

dönüş(doğru);

}

dönüş(yanlış);

}

 

Göstergeyi filtre işlevi olarak EA'ya taşıma sorunu

EA'mda bir göstergenin bir kısmını işlev olarak kullanmaya çalışırken, şimdi üç tür işlev olduğunu anlıyorum. İlk tür, bir işlem gerçekleştiren ve 0 döndüren bir Void'dir. İkinci tür, hesaplamalar yapar ve bir sonuç döndürür. Üçüncü tür, işlenmesi için bir dizi belirli değer verilmesini bekler ve ardından bir sonuç döndürür.

Hesaplamalarım, en az iki farklı şekilde kullanılması gereken üç sonuç veriyorsa ne yapabilirim? Bu hesaplamaların aşağıdaki nedenden dolayı Start() işlevinde yer alması gerekebilir: Dış değişkenlerden (manuel olarak ayarlanabilen) ve Global değişkenlerden (yeniden derlenmedikçe statik kalan) bilgi, EA'nın çeşitli işlevlerine akar. Start() işlevi, EA'nın beynidir ve bilgileri için diğer işlevlere ulaşır. Eğer fonksiyon bu değişkenleri kendi () parantezleri içinde bildirmişse, bir fonksiyona bir dizi değişkeni o fonksiyonun argümanları olarak iletebilir. Daha sonra bir sonuç alır ve sürecini bitirmek için başka bir fonksiyona daha fazla değişken iletebilir.

Değişkenleri diğer işlevlere argüman olarak iletmeye başladığımda, EA kodlamamda bir düzeyde başarı elde etmeyi umuyordum. Ne yazık ki, bir sıfır bölme hatası yarattım, çünkü muhtemelen bir değeri bir fonksiyondan diğerine argüman olarak iletmeye çalıştım, böylece değerin ulaşmaması gerekiyordu. Aslında eksik olduğu için sıfır bölme hatası aldım. Bir sonraki revizyonum, ara adımları kaldırdı ve değerleri doğrudan kullanıldıkları işlevlere iletti.

(Bu noktayı MQL4 kodlama öğrenme deneyimimde ilk iki ayımda kaydederek kendime bir iyilik yapmıyorum. Ancak, "MQL4 sıfır bölme hatası" ile ilgilenen herkes, bunu nasıl çözdüğümü bilmekten memnun olabilir. .)

Bir sonraki EA revizyonum sıfır bölme hatamı iyileştirdi, ancak strateji test cihazımın günlük yorumu artık bir yığın aşımı olduğunu gösteriyor. "MQL4 yığın taşması" diye googling yapanlar için bulduğum nedeni göndereceğim. Bir emri açmak veya değiştirmek için bir fiyatı değiştirirken "Puan" sabiti kullanılarak lotların ondalık eşdeğerine çevrilmemesiydi.

Buraya göndermek istediğim son ipucu (ilk iki aylık kodlama deneyimimden ve 12'den fazla EA yeniden yazımından sonra), bulması zor bir "eşit olmayan sol parantez" parantezini çözebilmemin bir yolu. MetaEditor, köşeli parantez metnini renkli olarak vurgulamıyor. Visual LISP Editor ile bir AutoDesk ürününüz varsa, MQ4 dosyanızı o editörde açabilir ve hemen hemen tüm parantez çiftlerini renkli olarak görebilirsiniz. Bu, eksik parantez için prova okumasını çok daha kolaylaştırır.

Cevaplarını bu forumda paylaşan herkese teşekkürler,

Mutlu Kodlama!

 

Herhangi bir yardım?

Ayrıca Metatrader emirlerinin komut satırından çalıştırılıp çalıştırılamayacağını bilmek istersiniz. Veya genel olarak, bir tür API kullanarak harici uygulamaları Metatrader ile arayüzlemek mümkünse.

teşekkürler

Jeff

Neden: