Nasıl kodlanır? - sayfa 132

 

Bu EA'da konum ekle

Merhaba,

öncelikle özür dilemeliyim çünkü ingilizce benim ana dilim değil.

Bu EA'yı, RSI 67'nin üzerinde olduğunda çubuğun kapanışında bir pozisyon eklemesini (0,1 lot satın alma) ve RSI 33'ün altında olduğunda satmasını söylemek için nasıl değiştirebilirim?

Örneğin:

zaman yakın RSI

17:31 1.3855 69.3 ---> 0.1 satın al

17:32 1.3858 70.5 ---> 0.1 satın al

17:33 1.3849 66.8 ---> işlem yok

17:34 1.3856 68,4 ---> 0,1 satın al

Toplam pozisyon +0.03

Kısa satmak için aynı.

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

//| Bu MQL, Expert Advisor Builder |

//| MetaTrader 4 için Uzman Danışman Oluşturucu |

//| |

//| Hiçbir durumda yazar herhangi bir zarardan sorumlu olmayacaktır. |

//| Kendi sorumluluğunuzda kullanın. |

//| |

//+---------------------- BU BAŞLIĞI KALDIRMAYIN --------------------+

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SIGNAL_SELL 2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESEL 4

#property telif hakkı "Uzman Danışman Oluşturucu"

#özellik bağlantısı "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

harici int SihirliSayı = 0;

harici bool SignalMail = Yanlış;

extern bool EachTickMode = False;

harici çift Lot = 0.1;

extern int Kayma = 3;

extern bool UseStopLoss = False;

harici int StopLoss = 30;

extern bool UseTakeProfit = False;

harici int TakeProfit = 60;

extern bool UseTrailingStop = False;

extern int TrailingStop = 30;

int BarCount;

int Akım;

bool TickCheck = Yanlış;

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

//| uzman başlatma işlevi |

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

int init() {

BarCount = Barlar;

if (EachTickMode) Akım = 0; başka Akım = 1;

dönüş(0);

}

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

//| uzman sıfırlama işlevi |

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

int tanım() {

dönüş(0);

}

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

//| uzman başlatma işlevi |

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

int start() {

int Sıra = SIGNAL_NONE;

int Toplam, Bilet;

çift StopLossLevel, TakeProfitLevel;

if (EachTickMode && Çubuklar != BarCount) TickCheck = False;

Toplam = SiparişlerToplam();

Sıra = SIGNAL_NONE;

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

//| Değişken Başlangıç |

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

double Buy1_1 = iRSI(NULL, 0, 10, PRICE_CLOSE, Current + 0);

çift Buy1_2 = 67;

double Sell1_1 = iRSI(NULL, 0, 10, PRICE_CLOSE, Mevcut + 0);

çift Satış1_2 = 33;

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

//| Değişken Son |

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

//Konumu kontrol et

bool IsTrade = Yanlış;

for (int i = 0; i < Toplam; ben ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = Doğru;

if(OrderType() == OP_BUY) {

//Kapat

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

//| Sinyal Başla(Çıkış Satın Al) |

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

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

//| Sinyal Sonu(Çıkış Satın Al) |

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

if (Sipariş == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Barlar != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Sinyal Uyarısı]", "[" + Symbol() + "] " + DoubleToStr(Teklif, Rakamlar) + " Satın Alma Kapat");

if (!EachTickMode) BarCount = Çubuklar;

IsTrade = Yanlış;

devam etmek;

}

//Sondaki durdurma

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Nokta * TrailingStop) {

if(OrderStopLoss() < Teklif - Nokta * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Çubuklar;

devam etmek;

}

}

}

} başka {

//Kapat

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

//| Sinyal Başla(Çıkış Sat) |

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

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

//| Sinyal Sonu (Çıkış Sat) |

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

if (Sipariş == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Barlar != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);

if (SignalMail) SendMail("[Sinyal Uyarısı]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Kapat Satış");

if (!EachTickMode) BarCount = Çubuklar;

IsTrade = Yanlış;

devam etmek;

}

//Sondaki durdurma

if(UseTrailingStop && TrailingStop > 0) {

if((OrderOpenPrice() - Sor) > (Nokta * TrailingStop)) {

if((OrderStopLoss() > (Sor + Nokta * TrailingStop)) || (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);

if (!EachTickMode) BarCount = Çubuklar;

devam etmek;

}

}

}

}

}

}

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

//| Sinyal Başlıyor(Giriş) |

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

if (Satınal1_1 > Satınal1_2) Sipariş = SIGNAL_BUY;

if (Sat1_1 < Sat1_2) Sipariş = SIGNAL_SELL;

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

//| Sinyal Sonu |

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

//Satın almak

if (Sipariş == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Barlar != BarCount)))) {

if(!IsTrade) {

// Serbest marjı kontrol et

if (AccountFreeMargin() < (1000 * Lot)) {

Print("Paramız yok. Serbest Marj = ", AccountFreeMargin());

dönüş(0);

}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Puan; başka StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Sor + TakeProfit * Puan; başka TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lot, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

if(Bilet > 0) {

if (OrderSelect(Bilet, SELECT_BY_TICKET, MODE_TRADES)) {

Print("Satın alma emri açıldı : ", OrderOpenPrice());

if (SignalMail) SendMail("[Sinyal Uyarısı]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Satın Alımı Aç");

} başka {

Print("SATIN AL emri açılırken hata oluştu : ", GetLastError());

}

}

if (EachTickMode) TickCheck = Doğru;

if (!EachTickMode) BarCount = Çubuklar;

dönüş(0);

}

}

//Satmak

if (Sipariş == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Barlar != BarCount)))) {

if(!IsTrade) {

// Serbest marjı kontrol et

if (AccountFreeMargin() < (1000 * Lot)) {

Print("Paramız yok. Serbest Marj = ", AccountFreeMargin());

dönüş(0);

}

if (UseStopLoss) StopLossLevel = Teklif + StopLoss * Puan; başka StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Teklif - TakeProfit * Puan; başka TakeProfitLevel = 0.0;

Bilet = OrderSend(Symbol(), OP_SELL, Lot, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sat(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);

if(Bilet > 0) {

if (OrderSelect(Bilet, SELECT_BY_TICKET, MODE_TRADES)) {

Print("SAT emri açıldı : ", OrderOpenPrice());

if (SignalMail) SendMail("[Sinyal Uyarısı]", "[" + Symbol() + "] " + DoubleToStr(Teklif, Rakamlar) + " Açık Satış");

} başka {

Print("SATIŞ emrini açarken hata: ", GetLastError());

}

}

if (EachTickMode) TickCheck = Doğru;

if (!EachTickMode) BarCount = Çubuklar;

dönüş(0);

}

}

if (!EachTickMode) BarCount = Çubuklar;

dönüş(0);

}

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

Yardımın için çok teşekkürler

Panurgo

 

Mevcut gün için elde edilen kârdan sonra ticareti nasıl durdurabilirim?

Merhaba.

Bir problemim var. Bir EA kodlayacağım.

Günün 20 PIP Karı alındığında, EA ertesi güne kadar herhangi bir sipariş açmamalıdır.

Lütfen bana yardım et.

teşekkürler

fxacemi

 
fxbeginner:
Merhaba.

Bir problemim var. Bir EA kodlayacağım.

Günün 20 PIP Karı alındığında, EA ertesi güne kadar herhangi bir sipariş açmamalıdır.

Lütfen bana yardım et.

Günün ilk emrinden sonra alım satıma izin vermemek bir fikir olabilir. orderend() işlevinden sonra bir "trade = false;" yerleştirin.

Ardından her yeni günde ticaret ödeneğini sıfırlayın:

if(timeprev!=iTime(Symbol(),PERIOD_D1,0)) { //---- Bu yeni bir gün

timeprev = iTime(Symbol(),PERIOD_D1,0);

ticaret = doğru; }

Ardından sinyalinizi kontrol ettiğinizde:

if(trade) {buradaki ticaret durumunuz }

Sadece bir örnek...

FerruFx

 

Gizli Emirler

Tüm Alış veya Satış Durdurma Emirlerini Komisyoncuların meraklı gözlerinden gizlemek için bir EA'yı nasıl kodlayabilirim. Mevcut EA, bekleyen emirleri Durdurma ve Satış Durdurmalarına sahiptir.

teşekkürler

LF

 
LazyForex:
Tüm Alış veya Satış Durdurma Emirlerini Komisyoncuların meraklı gözlerinden gizlemek için bir EA'yı nasıl kodlayabilirim. Mevcut EA, bekleyen emirleri Durdurma ve Satış Durdurmalarına sahiptir.

teşekkürler

LF

Fiyat alış-durdurma seviyesini geçtiğinde, alış-durdurma ve satış-durdurma değerini EA içinde kaydedin, bir alış emri gönderin, bunun tersi de satış durdurucu için.

 
Devil2000:
Fiyat alış-durdurma seviyesini geçtiğinde, alış-durdurma ve satış-durdurma değerini EA içinde kaydedin, bir alış emri gönderin, bunun tersi de satış durdurucu için.

Teşekkürler. size bir PM gönderdim

 

EA'ya çalışmayı bırakmasını söyle

Herkese selam,

Yaklaşık 7 günlük deneme yanılma, kesme ve yapıştırma ve saatlerce araştırmadan sonra ilk EA'mı neredeyse bitirdim....

Birisi lütfen bana bir EA'ya nasıl çıkış veya durdurma işlevi vereceğimi söyleyebilir mi?

EA'nın mevcut ve bekleyen tüm alım satımları silmesini ve özsermayede 10.000'e ulaştıktan sonra çıkmasını istiyorum. Şimdiye kadar kodun o kısmı aşağıdadır:

bool StopTrade;

int total = OrdersTotal(), cnt = 0, ExitAtEquity=10000;

for (cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(0,SELECT_BY_POS,MODE_TRADES);

if (AccountEquity ()== ExitAtEquity)//(TimeCurrent()- OrderOpenTime() >= ActiveMinutes*60 )

{if(OrderType()==OP_BUY)

OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);

if(OrderType()==OP_SELL)

OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);

if(OrderType()>OP_SELL)

OrderDelete(OrderTicket());

StopTrade=true;}

}

if (dclose==dopen && OrdersTotal() < ConcurrentTrades && StopTrade != true)

Gördüğünüz gibi, EA Equity'ye bakar ve ardından StopTrade değişkeninin bool değerini true olarak ayarlar. EA daha sonra komutu onaylar ve bir döngü için StopTrade != true altında hiçbir şey işlemez, ancak daha sonra StopTrade'in bool değeri sıfırlanır ve sanırım işlemler devam eder.

İlk olarak, bunu yapmam gereken şeyi, yaptığım şekilde yapmasını sağlamam için yine de var mı?

İkincisi, EA'ya bırakmasını söylemek için kullanabileceğim bir işlev var mı?

Tüm yardımlar büyük beğeni topluyor.

 

Bu kod ile ilgili yanlışlık nedir?

Birisi bana EA'mda bu komutla neden bir hata oluşturduğumu söyleyebilir mi?

if(OrderSelect(bTicket,SELECT_BY_TICKET)==true)

buyOrder=OrderType();

else

Print("OrderSelect returned the error of ",GetLastError());

bTicket is assigned in this prior line:

bTicket=OrderSend(Symbol(),OP_BUYSTOP,Lots,buyPoint,0,sl,buy_tp,"Script entry",0);

if(bTicket<=0) Print("Error = ",GetLastError());

else Print("ticket = ",bTicket);
My pending order is placed and returns the ticket number as assigned to bTicket, but then bTicket doesn't work in my OrderSelect(). I get an error 0 returned. I tried referencing by SELECT_BY_POS and assigning the returned ticket number to bTicket and it worked fine, but there's no way of knowing what the position number of all of my orders will be just be running the script. Any help is greatly appreciated.
 

Gönderimi taşımak yardımcı olmadı.

Sihirli sayıyı kullanamıyorum çünkü aynı EA'yı 8 farklı çiftte çalıştırıyorum. Orijinal yayınım nerede, böylece onu takip edebilirim?

 

Bu kod ile ilgili yanlışlık nedir?

EA'mda bu komutla neden bir hata oluşturduğumu söyleyen var mı?

if(OrderSelect(bTicket,SELECT_BY_TICKET)==true)

buyOrder=OrderType();

else

Print("OrderSelect returned the error of ",GetLastError());

bTicket is assigned in this prior line:

bTicket=OrderSend(Symbol(),OP_BUYSTOP,Lots,buyPoint,0,sl,buy_tp,"Script entry",0);

if(bTicket<=0) Print("Error = ",GetLastError());

else Print("ticket = ",bTicket);

Bekleyen siparişim verildi ve bTicket'e atanan bilet numarasını döndürdü, ancak ardından bTicket, OrderSelect()'imde çalışmıyor. 0 hatası döndürüldü. SELECT_BY_POS ile referans vermeyi ve iade edilen bilet numarasını bTicket'e atamayı denedim ve iyi çalıştı, ancak tüm siparişlerimin pozisyon numarasının sadece komut dosyasını çalıştırdığını bilmenin hiçbir yolu yok. Herhangi bir yardım büyük beğeni topluyor.

Neden: