Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Merhaba Roger09,
Yardımın için tekrar teşekkürler. Amacım, bir satın alma işleminde zararı durdurmayı çift artı x pip kırmak veya bir satış ticaretinde çift eksi x pip kırmak için bir komut dosyası kullanmak. Senaryo için bir kısayol tuşu ayarladım, böylece ticaret benim lehimize hareket ettiğinde bir miktar karı hızlıca kilitleyebilirim. Bazı ES'lerin bu özelliğe sahip olduğunu biliyorum ama ben manuel olarak yapabilmek için bir komut dosyası kullanmayı tercih ediyorum.
Satın almayı durdur ve satmayı durdur
Merhaba,
Ben bir EA ve CCI.
Programım emsal çubuk CCI>100'ün üzerindeyken satın alma koydu, ancak son çubuktan 5 pip daha yüksek satın almak istiyorum.
Aynı şeyi stop satım emriyle de istiyorum (son düşük seviyenin 5 pip altında)
İşte benim EA, bana yardım edebilir misin
teşekkürler
/+------------------------------------------------ ------------------+
//| Bu MQL, Expert Advisor Builder |
//| MetaTrader 4 için Uzman Danışman Oluşturucu |
//| |
/+---------------------- 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;
dış çift Lot = 1.0;
extern int Kayma = 30;
extern bool UseStopLoss = True;
harici int StopLoss = 200;
extern bool UseTakeProfit = True;
harici int TakeProfit = 600;
extern bool UseTrailingStop = True;
extern int TrailingStop = 250;
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 Var1 = iCCI(NULL, 0, 20, PRICE_CLOSE, Geçerli + 0);
double Var2 = iCCI(NULL, 0, 20, PRICE_CLOSE, Geçerli + 1);
double Buy1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Geçerli + 0);
double Buy1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Mevcut + 1);
çift Buy2_1 = Var1 ;
çift Buy2_2 = 100;
çift Buy3_1 = Var2 ;
çift Buy3_2 = 100;
double Sell1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Geçerli + 0);
double Sell1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Mevcut + 1);
çift Sat2_1 = Var1 ;
çift Sat2_2 = - 100;
çift Sat3_1 = Var2 ;
çift Sat3_2 = - 100;
//+------------------------------------------- -------------------+
//| 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 (Buy1_1 > Buy1_2 && Buy2_1 > Buy2_2 && Buy3_1 <= Buy3_2) Sipariş = SIGNAL_BUY;
if (Sat1_1 < Satış1_2 && Satış2_1 Satış3_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);
}
//+------------------------------------------- -------------------+
Merhaba Roger09, Yardımın için tekrar teşekkürler. Amacım, bir satın alma işleminde zararı durdurmayı çift artı x pip kırmak veya bir satış ticaretinde çift eksi x pip kırmak için bir komut dosyası kullanmak. Senaryo için bir kısayol tuşu ayarladım, böylece ticaret benim lehimize hareket ettiğinde bir miktar karı hızlıca kilitleyebilirim. Bazı ES'lerin bu özelliğe sahip olduğunu biliyorum ama ben manuel olarak yapabilmek için bir komut dosyası kullanmayı tercih ediyorum.
Durağınızı yalnızca bir kez ayarlamanız gerekiyorsa, bu EA kodunu kullanın
harici int pip=10;//
//+------------------------------------------- -------------------+
//| komut dosyası programı başlatma işlevi |
//+------------------------------------------- -------------------+
int başlangıç()
{
//----
int ot = OrdersTotal();
için (int i=0; i<ot; i++)
{
int o = OrderSelect(i, SELECT_BY_POS);
if (OrderSymbol() == Symbol()&&OrderType() <2)
{
çift sl = 0;
if (OrderType() == OP_BUY&& OrderStopLoss() =pip*Nokta)
sl = OrderOpenPrice() +pip*Nokta;
if (OrderType() == OP_SELL && (OrderStopLoss() > OrderOpenPrice()||OrderStopLoss()==0)
&&OrderOpenPrice()-Ask>=pip*Puan)
sl = OrderOpenPrice() -pip*Nokta;
if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0))
Print("Error_Modifying - ",GetLastError());
}
}
//----
dönüş(0);
}
Merhaba,
Ben CCI ile bir EA.
Programım, emsal bar CCI>100'ün üzerindeyken satın alma koydu, ancak son çubuktan 5 pip daha yüksek satın almak istiyorum.
Aynı şeyi stop satım emriyle de istiyorum (son düşük seviyenin 5 pip altında)
İşte benim EA, bana yardım edebilir misin
teşekkürler
Yer değiştirmek
double Buy1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double Buy2_1 = Var1 ;
double Buy2_2 = 100;
double Buy3_1 = Var2 ;
double Buy3_2 = 100;
double Sell1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double Sell1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double Sell2_1 = Var1 ;
double Sell2_2 = - 100;
double Sell3_1 = Var2 ;
double Sell3_2 = - 100;[/CODE]
To
[CODE]
double Buy1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double Buy1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double Buy2_1 = Var1 ;
double Buy2_2 = 105;
double Buy3_1 = Var2 ;
double Buy3_2 = 105;
double Sell1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double Sell1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double Sell2_1 = Var1 ;
double Sell2_2 = - 105;
double Sell3_1 = Var2 ;
double Sell3_2 = - 105;Yer değiştirmek
double Buy1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double Buy2_1 = Var1 ;
double Buy2_2 = 100;
double Buy3_1 = Var2 ;
double Buy3_2 = 100;
double Sell1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double Sell1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double Sell2_1 = Var1 ;
double Sell2_2 = - 100;
double Sell3_1 = Var2 ;
double Sell3_2 = - 100;[/CODE]
To
[CODE]
double Buy1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double Buy1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double Buy2_1 = Var1 ;
double Buy2_2 = 105;
double Buy3_1 = Var2 ;
double Buy3_2 = 105;
double Sell1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double Sell1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double Sell2_1 = Var1 ;
double Sell2_2 = - 105;
double Sell3_1 = Var2 ;
double Sell3_2 = - 105;Evet, ama bu kodla bir sonraki barın açılışında gireceğim ve bir sonraki barın artacağından emin olacağım, bu yüzden son yüksekten 5 pip ile satın almak gerekir.
saat başı ticaret
Merhaba- Günün saatine göre EA'mı çağırmak istiyorum. belki sabah 5 ve akşam 5 veya her 30 dakikada bir vb.
bunu nasıl yapabilirim?
Herhangi bir yardım için çok teşekkürler.
Kevin
Bu size yardımcı olabilir:
if((TimeHour(TimeLocal( ) )!=5&&TimeMinute(TimeLocal( ) )!=0)||(TimeHour(TimeLocal( ) )!=17
&&TimeMinute(TimeLocal( ) )!=0))dönüş();
start() öğesinin başına koyun.
Birisi lütfen buna bir göz atabilir ve neden işe yaramadığını bana bildirebilir.
Yorum olarak kullanmayı düşünüyorum.
çift AvgWin()
{
double CountTrades = 0;
çift CountPips = 0;
for(int Ticket=0;Ticket<OrdersHistoryTotal();Ticket++)
{
OrderSelect(Bilet,SELECT_BY_TICKET,MODE_HISTORY);
if(MyAccount==HesapNumarası() && OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber)
{
//------>>>>
if(OrderType()==OP_BUY && OrderClosePrice()>=OrderOpenPrice())
CountTrades++;
{
if(OrderProfit() >= 0)
CountPips++;
}
if(OrderType()==OP_SELL && OrderClosePrice()<=OrderOpenPrice())
CountTrades++;
{
if(OrderProfit() >= 0)
CountPips++;
}
}
}
if(CountPips < 0)
dönüş(MathRound(CountPips/CountTrades)*10);
başka
Print("Gerçek Zamanlı Ortalama Kazanç Yok");
dönüş(mAvgWin);
}
Her şeyden önce değiştirin
SELECT_BY_TICKET'ten SELECT_BY_POS'a
İkincisi, CountPips her zaman 0'dan fazladır.
Her şeyden önce değiştirin
SELECT_BY_TICKET'ten SELECT_BY_POS'a
İkincisi, CountPips her zaman 0'dan fazladır.Bu tamam mı
int AvgWin()
{
int CountTrades = 0;
int CountPips = 0;
for(int Ticket=0;Ticket<OrdersHistoryTotal();Ticket++)
{
OrderSelect(Bilet,SELECT_BY_POS,MODE_HISTORY);
if(MyAccount==HesapNumarası() && OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber)
{
//------>>>>
if(OrderType()==OP_BUY && OrderClosePrice()>=OrderOpenPrice())
CountTrades++;
{
if(OrderProfit() >= 0)
CountPips++;
}
if(OrderType()==OP_SELL && OrderClosePrice()<=OrderOpenPrice())
CountTrades++;
{
if(OrderProfit() >= 0)
CountPips++;
}
}
}
if(CountPip > 0)
dönüş(MathRound(CountPips/CountTrades)*10);
başka
Print("Gerçek Zamanlı Ortalama Kazanç Yok");
dönüş(mAvgWin);
}