Nasıl kodlanır? - sayfa 145

 

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);

}

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

 
tk748:
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);

}

 
cgassfr67:
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_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 = 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;
 
Roger09:
Yer değiştirmek
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 = 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.

 
Roger09:
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);

}