- Nasıl kodlanır?
- kodlama yardımına ihtiyacım var lütfen
- Yeni sürüm
mql4 kodlamada çok yeniyim ve ilk EA'mı tamamladım. Şu anki tek sorunum, birden fazla çiftte işlem açmayı sağlayamam. Terminalin günlüğün yanındaki EA bölümünde, EA bir çift üzerinde işlemleri açıp kapatsa bile, bir hata akışı, sipariş kapatma işlevi için geçersiz bilet gönderir. Biri lütfen yardım edebilir mi?
Kodunuzu veya hata günlüğünüzü göstermediğinizi nasıl bilmemizi beklersiniz?
Biz akıl okuyucu değiliz! Eğer yardımımızı istiyorsanız, kodunuzu ve verdiği hataları (sonuçları günlükte) göstermeniz gerekecektir. Kodunuza baktığımızda hangi döviz çiftlerini ve zaman dilimlerini test ettiğinizi bilmek de yardımcı olacaktır.
Ayrıca, MetaTrader 4'te Strateji Test Cihazında bir seferde yalnızca tek bir para birimini test edebileceğinizi lütfen unutmayın. EA'nız tek bir grafikten aynı anda birden fazla para birimi ticareti yapıyorsa, bunu Strateji Test Cihazında test edemezsiniz - yalnızca canlı bir Demo veya gerçek hesapta!
Matt_Townsend : EA bir çiftte işlemleri açıp kapatsa da gayet iyi. | Bu yüzden tavsiye ederim Tek bir EA'da birden fazla para birimi ticareti yapmayın
|
Lütfen gönderinizi düzenleyin ve kodunuzu eklemek için SRC düğmesini kullanın! Okunması zor olduğu için standart metin olarak kopyalama/geçirme yapmayın. Nasıl yapılması gerektiğini diğer konulardan görebileceğinize eminim. Lütfen kodunuzu göndermek için SRC düğmesini kullanın.
EDIT: Daha önce istendiği gibi - ... Hangi döviz çiftlerini ve zaman dilimlerini test ettiğinizi bilmek de yardımcı olacaktır ...
EDIT2: Daha önce istendiği gibi - ... ve verdiği hataların yanı sıra (logdaki sonuçlar) ...
Lütfen gönderinizi düzenleyin ve kodunuzu eklemek için SRC düğmesini kullanın! Okunması zor olduğu için standart metin olarak kopyalama/geçirme yapmayın. Nasıl yapılması gerektiğini diğer konulardan görebileceğinize eminim. Lütfen kodunuzu göndermek için SRC düğmesini kullanın.
//| Simple Moving Average Crossover Strategy.mq4 |
//| Matthew Townsend |
//+------------------------------------------------------------------+
#property version "1.05"
#property strict
//---
//---Inputs
extern double Lots = 0.01 ;
extern int FastMA = 5 ;
input int FastMAMode = MODE_EMA ;
extern int SlowMA = 8 ;
input int SlowMAMode = MODE_SMA ;
//+----------------------------------------+
//|undesirables |
//+----------------------------------------+
int init()
{
//----
//----
return ( 0 );
}
int deinit()
{
//----
//----
return ( 0 );
}
//+---------------------------------------------+
//|System start |
//+---------------------------------------------+
int start()
{
double fastma, slowma;
int ticket, total;
//---define Ma's
fastma = iMA ( NULL , 0 , 5 , 0 , MODE_EMA , PRICE_CLOSE , 0 );
slowma = iMA ( NULL , 0 , 8 , 0 , MODE_SMA , PRICE_CLOSE , 0 );
total = OrdersTotal ();
//---Start operations
if (total < 1 )
{
if (fastma > slowma)
{
ticket = OrderSend ( Symbol (), OP_BUY ,Lots, Ask , 10 , 0 , 0 , "" , 0 , 0 ,Blue);
if (ticket > 0 )
{
if ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES ))
Print ( "Buy order opened : " , OrderOpenPrice ());
}
else
Print ( "Error opening order : " , GetLastError ());
return ( 0 );
}
if (fastma < slowma)
{
ticket = OrderSend ( Symbol (), OP_SELL ,Lots, Bid , 10 , 0 , 0 , "" , 0 , 0 ,Red);
if (ticket > 0 )
{
if ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES ))
Print ( "Sell order opened : " , OrderOpenPrice ());
}
else
Print ( "Error opening order : " , GetLastError ());
return ( 0 );
}
return ( 0 );
}
bool ans;
if ( OrderType ()== OP_BUY )
{
while (fastma < slowma)
{
ans = OrderClose ( OrderTicket (),Lots, Bid , 10 , clrNONE );
if (ticket < 1 )
{
if ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES ))
Print ( "Buy order closed : " , OrderClosePrice ());
}
else
Print ( "Error closing order : " , GetLastError ());
return ( 0 );
}
}
if ( OrderType ()== OP_SELL )
{
while (fastma > slowma)
{
ans = OrderClose ( OrderTicket (),Lots, Ask , 10 , clrNONE );
if (ticket < 1 )
{
if ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES ))
Print ( "Sell order closed : " , OrderClosePrice ());
}
else
Print ( "Error closing order : " , GetLastError ());
return ( 0 );
}
}
return ( 0 );
}
//+-----------------------------------------------------------------------------------+
Konuyu çok uzatmamak için bir önceki mesajınızı DÜZENLEMENİZİ , yenisini eklememenizi rica ettim!
1 saatlik zaman diliminde, EURUSD ve 1hr GBPUSD'de test yapıyordum
...
ans = OrderClose ( OrderTicket (),Lots, Bid , 10 , clrNONE );
...
ans = OrderClose ( OrderTicket (),Lots, Ask , 10 , clrNONE );
...
Kapatma işleminin sonucunu doğru bir şekilde kontrol etmiyorsunuz.
Mantıksal olarak EA'nızda birkaç sorun var, ancak şu anda olduğu gibi, Strateji Test Cihazında benim tarafımda hatasız çalışıyor, bu yüzden lütfen aldığınız hataların listesini sağlayın!
Aşağıdaki kod için zaten iki derleyici uyarısı var:
...
ans = OrderClose ( OrderTicket (),Lots, Bid , 10 , clrNONE );
...
ans = OrderClose ( OrderTicket (),Lots, Ask , 10 , clrNONE );
...
Kapatma işleminin sonucunu doğru bir şekilde kontrol etmiyorsunuz.
Mantıksal olarak EA'nızda birkaç sorun var, ancak şu anda olduğu gibi, benim tarafımda hatasız çalışıyor, bu yüzden lütfen aldığınız hataların listesini sağlayın!
EA'dan aldığım tek hata orderclose işlevi için geçersiz bilet, yanında bir sayı var, gerçek günlüğü göstermek istiyorum, ancak EA çalışırken ikinci grafikte hiçbir şey yapmıyor, çünkü çünkü normalde hemen bir ticaret açmaya çalışırdı. Günlük hatayla dolmaya başlarsa, size gerçek günlüğü nasıl gösteririm?
Click, Ctrl-Click veya Shift-Click (standart Windows işlemi) ile söz konusu satırları seçin, ardından seçimi Sağ Tıklayın ve "Kopyala"yı seçin!
EDIT: Kodla ilgili olarak, OrderSelect kullanıyorsunuz, ancak her zaman her zaman çalıştığını varsayıyorsunuz. Ve çalışmadığında, kapanışınızda OrderTicket() gibi Sipariş ayrıntıları işlevlerini kullanmaya devam edersiniz; bu, ilk OrderSelect() de başarısız olursa başarısız olabilir. Belirttiğim gibi, kodunuzda birçok mantık probleminiz var!
bool ans;
//You do not select an order
{
while(fastma < slowma) //Use if not while
{
ans = OrderClose(OrderTicket(),Lots,Bid,10,clrNONE);
if(ticket < 1) //ticket is a local variable and has not been assigned a value
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Buy order closed : ", OrderClosePrice());
}
else
Print("Error closing order : ", GetLastError());
return(0);
}
}
EA'dan aldığım tek hata orderclose işlevi için geçersiz bilet, yanında bir sayı var, gerçek günlüğü göstermek istiyorum, ancak EA çalışırken ikinci grafikte hiçbir şey yapmıyor. çünkü normalde hemen bir ticaret açmaya çalışırdı. Günlük hatayla dolmaya başlarsa, size gerçek günlüğü nasıl gösteririm?
EA'nızın birden fazla döviz çifti veya zaman diliminde kullanımıyla ilgili çok önemli bir not daha.
Kodunuz, "Sihirli Numara" seçimini kullanmaz ve Geçmiş'teki açık siparişleri kontrol ederken kullanılan Sembolü (veya "Sihirli numara") kontrol etmez. Yani özünde EA'nız ne kendisiyle ne de diğer EA'larla düzgün çalışmayacaktır.
Olduğu gibi, bu EA'yı başka hiçbir EA çalışmadan, hatta başka bir grafikte bile kendi başına kullanabilirsiniz!

- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz