اذا كان لديك طريقة فى المتاجرة و أردت أن تصنع اكسبيرت فتابع معى ذلك الموضوع
و باذن الله سيكون التعاون بيننا فى صناعة الاكسبيرتات و المؤشرات
Printable View
اذا كان لديك طريقة فى المتاجرة و أردت أن تصنع اكسبيرت فتابع معى ذلك الموضوع
و باذن الله سيكون التعاون بيننا فى صناعة الاكسبيرتات و المؤشرات
نعم عندى خطة اكسبرت جيدة لحد بعيد جدا
معاك بس انشالله تزبط هالمره
بالتوفيق ان شاء الله
اليكم الآن أول اكسبيرت فى هذا الموضوع و يعتمد على تقاطع الموفنج أفريج 12و 25 و هذا هو الكود الخاص به
و للتحكم فى اعدادات الستوب لوس و الهدف و التريلينج ستوب و قيمة اللوت من خلال ذلك الكودكود PHP://+------------------------------------------------------------------+
//| SMASSS.mq4 |
//| Copyright © 2008, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = True;
extern double Lots = 1.0;
extern int Slippage = 3;
extern bool UseStopLoss = True;
extern int StopLoss = 30;
extern bool UseTakeProfit = False;
extern bool UseTrailingStop = True;
extern int TrailingStop = 15;
int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;
if (EachTickMode) Current = 0; else Current = 1;
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;
if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;
//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+
double Var1 = iMA(NULL, 0, 12, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Var2 = iMA(NULL, 0, 25, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Buy1_1 = Var1 ;
double Buy1_2 = Var2 ;
double Sell1_1 = Var2 ;
double Sell1_2 = Var1 ;
//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+
//Check position
bool IsTrade = False;
for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
IsTrade = True;
if(OrderType() == OP_BUY) {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Signal End(Exit Buy) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Signal End(Exit Sell) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+
if (Buy1_1 > Buy1_2) Order = SIGNAL_BUY;
if (Sell1_1 > Sell1_2) Order = SIGNAL_SELL;
//+------------------------------------------------------------------+
//| Signal End |
//+------------------------------------------------------------------+
//Buy
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("BUY order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
} else {
Print("Error opening BUY order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
//Sell
if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("SELL order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
} else {
Print("Error opening SELL order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
if (!EachTickMode) BarCount = Bars;
return(0);
}
//+------------------------------------------------------------------+
و للتحكم فى اعدادات الموفنج أفريج من خلال ذلك الكودكود PHP:extern double Lots = 1.0;
extern int Slippage = 3;
extern bool UseStopLoss = True;
extern int StopLoss = 30;
extern bool UseTakeProfit = False;
extern bool UseTrailingStop = True;
extern int TrailingStop = 15;
و كما تلاحظ هنا أن الاكسبيرت هنا يعتمد على تقاطع موفنج 12 و موفنج 25 و SMA هى اختصار Simple moving averageكود PHP:double Var1 = iMA(NULL, 0, 12, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Var2 = iMA(NULL, 0, 25, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
اريد اكسبرت للشموع وتقاطع cci
السلام عليكم
موضوع رائع وجزاك الله خيرا علي هذا الموضوع لكن أريد أن أوضحلك بعض الملاحظات علي هذا الكود
الأكسبرت لم ينفذ عملية الشراء عند لحظة التقاطع ولكنه سينظر هل الموفنج أفرج 12 أكبر من الموفنج أفرج 25 ؟ اذا تحقق هذا الشرط سيبدأالشراء مباشره
المشكله قد يبدأ الأكسبرت والموفنج أفرج 12 أكبر من الموفنج أفرج 25 والتقاطع لم يحدث.
الباراميتر للموفنج 12 هو
(NULL, 0, 12, 0, MODE_SMA, PRICE_CLOSE, Current + 0)
ورقم صفر بالأخير يعني الموفنج أفرج بالفتره الحاليه واذا كان 1 يعني بالفتره السابقه
لذلك يوجد حل لهذه المشكله سأوضحه لك
https://forum.arabictrader.com/uploa...586_478954.GIF
عندما يتقاطع الموفنج أفرج 12 مع الموفنج أفرج 25 لأعلي يكون شرط الشراء
1- موفنج أفرج12 للفتره 0 أكبر من موفنج أفرج 25 للفتره 0
2-موفنج أفرج 12 للفتره 1 أصغر من موفنج أفرج 25 للفتره 1
يعني سنضع بعض الأضافات علي الكود التالي
if (Buy1_1 > Buy1_2) Order = SIGNAL_BUY
ليكون
if (Buy1_1 > Buy1_2&&Buy1_3>Buy1_4 ) Order = SIGNAL_BUY;
ونضيف
double Buy1_3 = Var3
double buy1_4=var4
بعد الأكود العلويه مع عدم نسيان علامة ;
ونضيف
double var3= iMA(NULL, 0, 25, 0, MODE_SMA, PRICE_CLOSE, Current + 1 );
double var4=iMA(NULL, 0, 12, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
حيث غيرنا الرقم صفر بالرقم 1 وهو حركة الموفنج بالفتره السابقه واذا أردنا الفتره قبل السابقه ستكون 2 وهكذا
طالما أنت جعلت
extern bool EachTickMode = True;
يعني الأكسبرت لن ينتظر أغلاق الشمعه وسينفذ العمليه بعد التقاطع مباشره
بما أن خبرتى البرمجية ليست كبيرة لذلك أرجو من الأستاذ وضاح عطار الاشراف الكامل على ذلك الموضوع
هذا الاكسبيرت خاص باستراتيجية صبح صبح
التى تم طرحها من قبل فى هذا المنتدى والتى تعتمد على تقاطع الموفنج أفريج و مؤشر ار اس اى لتأكيد الدخول و هذا هو لكود الخاص بهذه الاستراتيجية
و هذا الاكسبيرت به اختلاف فى الكود حيث تم تغيير فى هذا الكود من True الى Falseكود PHP://+------------------------------------------------------------------+
//| SABAH-SABAH.mq4 |
//| Copyright © 2008, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = False;
extern double Lots = 1.0;
extern int Slippage = 3;
extern bool UseStopLoss = True;
extern int StopLoss = 75;
extern bool UseTakeProfit = True;
extern int TakeProfit = 75;
extern bool UseTrailingStop = False;
extern int TrailingStop = 0;
int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;
if (EachTickMode) Current = 0; else Current = 1;
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;
if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;
//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+
double MA1 = iMA(NULL, 0,7, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double MA2 = iMA(NULL, 0,15,0, MODE_EMA, PRICE_CLOSE, Current + 0);
double MA3 = iMA(NULL, 0,7, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double MA4 = iMA(NULL, 0,15,0, MODE_EMA, PRICE_CLOSE, Current + 1);
double RSI = iRSI(NULL,0,14,PRICE_CLOSE,0);
//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+
//Check position
bool IsTrade = False;
for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
IsTrade = True;
if(OrderType() == OP_BUY) {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Signal End(Exit Buy) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Signal End(Exit Sell) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+
if ( MA1 > MA2 && MA4 > MA3 && RSI>55 ) Order = SIGNAL_BUY;
if ( MA2 > MA1 && MA3 > MA4 && RSI<40 ) Order = SIGNAL_SELL;
//+------------------------------------------------------------------+
//| Signal End |
//+------------------------------------------------------------------+
//Buy
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("BUY order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
} else {
Print("Error opening BUY order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
//Sell
if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("SELL order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
} else {
Print("Error opening SELL order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
if (!EachTickMode) BarCount = Bars;
return(0);
}
//+------------------------------------------------------------------+
و الشكر للأستاذ فوركس كيلر فى توضيح ذلك الأمركود PHP:extern bool EachTickMode = False;
كما تم التعديل فى قيم الموفنج أفريج و اضافة مؤشر ار اس اى كما هو واضح فى ذلك الكود
أما أمر الدخول فيكون من خلال ذلك الكودكود PHP:double MA1 = iMA(NULL, 0,7, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double MA2 = iMA(NULL, 0,15,0, MODE_EMA, PRICE_CLOSE, Current + 0);
double MA3 = iMA(NULL, 0,7, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double MA4 = iMA(NULL, 0,15,0, MODE_EMA, PRICE_CLOSE, Current + 1);
double RSI = iRSI(NULL,0,14,PRICE_CLOSE,0);
كود PHP:if ( MA1 > MA2 && MA4 > MA3 && RSI>55 ) Order = SIGNAL_BUY;
if ( MA2 > MA1 && MA3 > MA4 && RSI<40 ) Order = SIGNAL_SELL;
حاول فهم النقاط التي شرحها الأستاذ zezocool
يمكنك عمل هذا الأكسبرت بأبسط مما تتخيل بعد ذلك
الباراميتر الخاص بأغلاق الشموع هو ( iClose(NULL, 0, Current + 0
مع عدم نسيان النقطتين بالأخير (هامه جدا)
والباراميتر الخاص بمؤشر CCI هو
( iCustom(NULL, 0, "CCI", 111, 0, Current + 0
مع عدم نسيان النقطتين بالأخير بعد ذلك أرسم كل ماتريده علي ورقه يعني مثلا أغلاق شمعه فوق التقاطع أو شمعتين أو أربعه
تحكم بالرقم الأخير 0 أو 1 أو 2
وبنفس الطريقه السابقه تماما
الرقم 111 هوCCIperiod لمؤشر cci عدله كما تريد
الارقام ليس لها باراميتر وتكتب مكان الباراميتر كما هي
double تستعمل لتعريف رقم كسري مثل 1.2225
int لتعريف رقم صحيح
ستلاحظ أننا أحيانا نضع رمز extern double
نستعملها كي تظهر لنا هذه الأرقام والمتغيرات ويمكننا التحكم بها من أعدادات الأكسبرت extern
احترت كثيرا فى مؤشر الموفنج أفريج فقد حاولت كثيرا صناعة اكسبيرت يعتمد على تقاطع الموفنج افريج و باعدادات مختلفة و لكن جميع تلك الاكسبيرتات مصيرها الخسارة دائما فهل يستطيع أحد المساعدة فى تجربة اعدادات مختلفة للموفنج و كل ما عليك أمر بسيط جدا هو نسخ الكود الموجود فى المشاركة الخامسة و لصقه فى برنامج MQL الخاص بصناعة الاكسبيرتات و التغيير فى قيم الموفنج المختلفة
انظر المشاركة 5 و 7