Kodlama konusunda yardıma ihtiyacınız var

 

Merhaba

çok basit bir EA kodlamaya çalışıyorum ama bir programcı değilim ve daha önce hiç EA yapmadım.

MACD Örneği'ni MT4'ten aldım ve bazı bölümleri düzenledim ve ihtiyacım olmadığını düşündüğüm geri kalan her şeyi sildim.

Kodumun gerçekten korkunç olduğundan eminim

EA'nın şu şekilde çalışmasını istiyorum:

Özel göstergem ELine, adım adım hareket eden iki satıra sahiptir. Bazen biri diğerinden daha yüksek, bazen de aynı.

Bir çizgi diğerini geçtiğinde, hangi çizginin kesiştiğine bağlı olarak EA'nın bir uzun pozisyon veya kısa bir pozisyon girmesini istiyorum.

EA'nın başlangıcı dışında her zaman açık bir pozisyon vardır.

Derlemeye çalıştığımda "eğer" yazıyor - noktalı virgül bekleniyor (20,7)

Sonra bir sonraki adımda, yeni bir tane açtığında zaten var olan bir pozisyonu her zaman kapatmalı ama bunu şu ana kadar kodlayamadım.

Birisi lütfen kodumdaki hataları düzeltebilir ve belki de EA yeni bir pozisyona girdiğinde pozisyonları nasıl kapatabileceğimi söyleyebilir mi?

Çok teşekkürler!

Dosyalar:
el1.mq4  2 kb
 

Merhaba

Şimdi bu sorunu çözdüm. EA'yı derleyebilir ve geriye dönük test etmeye çalıştım. Ama ne yazık ki hiçbir şey alıp satmıyor!

Bunun dışında işe yarıyor gibi görünüyor, bu dergi:

14:16:18 EL1 girişleri: Lot=0,1; Zaman dilimi=240;

14:16:18 ELine GBPUSD,H4: kaldırıldı

14:16:18 2005.11.14 00:00 ELine GBPUSD,H4: başarıyla yüklendi

Ve bu EA Kodudur:

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

//| T1.mq4

//|

//|

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

harici çift Lot = 0.1;

harici int Zaman Çerçevesi = 240;

string strDirCurrent="yok";

string strDirPrevious="yok";

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

//| |

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

int başlangıç()

{

// mevcut yönü kontrol et

if(iCustom(NULL,Timeframe,"ELine",0,0)>iCustom(NULL,Timeframe,"ELine",1,0))

strDirCurrent="uzun";

if(iCustom(NULL,Timeframe,"ELine",0,0)<iCustom(NULL,Timeframe,"ELine",1,0))

strDirCurrent="kısa";

// önceki yönle karşılaştır ve bir değişiklik varsa bir pozisyon aç

if(strDirCurrent=="uzun" && strDirPrevious=="kısa")

OrderSend(Symbol(),OP_BUY,Lots,Ask,3,50,200,"EABuyOrder",16384,0,Yeşil);

if(strDirCurrent=="kısa" && strDirPrevious=="uzun")

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,50,200,"EASellOrder",16384,0,Kırmızı);

strDirPrevious=strDirCurrent;

}

// son.

Herhangi bir yardım çok açığız !!

teşekkürler

Eric

 

Merhaba,

NULL olarak NUL L'yi değiştirdiğimde, kopyalamadan herhangi bir hata almıyorum

 

Bu panodaki geliştirme kursuna bakarsanız, MA'ları çaprazlayan bir kod olan "My_First_EA"yı bulacaksınız.

EA'nızı test ederken herhangi bir sonuç alamadım ve EA-Proramming'de de çok yeniyim. Afedersiniz

 

teşekkürler balo. NULL'daki boşluk sadece kopyala ve yapıştırdan ist, kodumda doğru yazılmış. Ve derler (ikinci versiyon).

MQL kursunu biliyorum (henüz hepsini bitirmemiş olmama rağmen).

ADX'in test etmesi için benzer bir EA yazdım ve orada çalışıyor. Sadece özel göstergemi kullanmaya çalıştığımda işlem yapmıyor ..

 

Lütfen göstergenizi ekleyin - böylece geriye dönük test yapabiliriz

Merhaba

Harika kod - Geri test etmeyi çok isterim - lütfen bize özel Eline'ınızı verin.

Kodunuzu kapsamlı bir şekilde değiştirdim.

/*

* Created by SharpDevelop.

* User: CARDIO

* Date: 1/17/2006

* Time: 4:55 AM

*

*Todo: if there is an ope position - close it- then open in opposite direction.

*

*/

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

//| T1.mq4

//|

//|

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

#include

extern double Lots = 0.1;

extern int Timeframe = 240;

string strDirCurrent="none";

string strDirPrevious="none";

int cnt, magicEA;

bool isclosing = false;

double slippage = 3;

int init() {

return(0);

}

int deinit() {

return(0);

}

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

//| |

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

int start()

{

magicEA = 16384;

// check for current direction

if(iCustom(NULL,Timeframe,"ELine",0,0)>iCustom(NULL,Timeframe,"ELine",1,0))

{

strDirCurrent="long";

}

if(iCustom(NULL,Timeframe,"ELine",0,0)<iCustom(NULL,Timeframe,"ELine",1,0))

{strDirCurrent="short";

}

// compare to previous direction and open a position if there was a change

if(strDirCurrent=="long" && strDirPrevious=="short")

{

//firs close open positions

isclosing = true;

isclosing1();

OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,"T1_EA_Buy_Order",16384,0,Green);

return(0);

}

if(strDirCurrent=="short" && strDirPrevious=="long")

{

isclosing = true;

isclosing1();

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,"T1_EA_Sell_Order",16384,0,Red);

return(0);

}

strDirPrevious=strDirCurrent;

return(0);

}

// the end.

void isclosing1(){

//Close all open orders

//todo: get a requote on the prices if error 138 occurs, use refreshrates

//todo: check if the last 3 closes where losers - if so stop the ea

int totalOrders = OrdersTotal();

int numPos = 0;

for(cnt=0; cnt<totalOrders; cnt++) { // scan all orders and positions...

OrderSelect(cnt, SELECT_BY_POS); // the next line will check for ONLY market trades, not entry orders

if(OrderSymbol() == Symbol() && OrderType() <= OP_SELL && OrderMagicNumber() == magicEA) { // only look for this symbol, and only orders from this EA

numPos++;

if(OrderType() == OP_BUY) { // Check for close signal for bought trade

if(isclosing) {

if (OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Violet)) { // Close bought trade

//writetofile("10","Closed buy", OrderTicket());

//prtAlert("Day Trading: Closing BUY order");

} else {

// writetofile("10b","Closed buy fail", ErrorDescription(GetLastError()));

}

}

} else { // Check sold trade for close signal

if(isclosing) {

OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Violet);

//writetofile("10","Closed buy", OrderTicket());

// prtAlert("Day Trading: Closing SELL order");

}else {

//writetofile("10c","Closed sell fail", ErrorDescription(GetLastError()));

}

}

}

}

}

 

düzeldi umarım

Sabit güçlükler. Bunu dene

Hala para yönetimi vb. üzerinde çalışmamız gerekiyor.

Dosyalar:
el1.mq4  4 kb
 

Teşekkürler, şimdi şunu anladım:

2006.01.17 18:59:10 2006.01.12 08:20 EL1: OrderSend işlevi için parametre 7 olarak geçersiz çift sayı

2006.01.17 18:59:10 2006.01.12 08:10 EL1: OrderSend işlevi için yorum bir dize olmalıdır

2006.01.17 18:59:09 EL1: başarıyla yüklendi

ve hata yaklaşık bir milyon kez tekrarlanır ;-)

ama bunu düzeltmenin kolay olduğunu düşünüyorum.

 

Bunu dene

Kodu test etmiyorum - göstergeyi verirseniz - test edeceğim - aslında çok yakında başka bir gösterge ile test edeceğim. Yine de bunun yardımcı olacağını umuyorum.

Dosyalar:
el1_1.mq4  5 kb
 

hala düzeltmeye çalışıyorum - bekle şimdi göndereceğim

Hala sabitleniyor

 

Sabit - umarım

Aslında bir kar al (tp) değerini kaçırıyordunuz.

tp ve stoploss istemiyor musun?

İyi şanlar

Dosyalar:
el1_2.mq4  5 kb