الداله صحيحه لا أرى فيها أي خطأ إحتمال الخطأ إما في دالة إغلاق الصفقه أو تحقق شرط الإغلاق تأكد من أين الخطأ تماما حتى تستطيع حله لكن بالنسبه لدالة التوقيت فهي صحيحه
Printable View
مثال
بالنسبه لإغلاق العقود فسوف تقوم بعمل داله لإغلاق الصفقات البيع والشراءكود PHP:if(UseKijunStopLoss)SL=iIchimoku(Symbol(),0,9,26,52,MODE_KIJUNSEN,0)+5*Point;
OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),3,SL,0," EA",MagicNumber,0,Blue);
if(UseKijunStopLoss)SL=iIchimoku(Symbol(),0,9,26,52,MODE_KIJUNSEN,0)-5*Point;
OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),3,SL,0," EA",MagicNumber,0,Red);
ثم ستضع شروط إغلاق البيع والشراءكود PHP:void CloseBuyOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3);
}
}
}
}
void CloseSellOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3);
}
}
}
}
كود PHP:double Kijun=iIchimoku(Symbol(),0,9,26,52,MODE_KIJUNSEN,1);
if(Close[1]>Kijun)
{
CloseSellOrders();
}
if(Close[1]<Kijun)
{
CloseBuyOrders();
}
ارجو التعديل على الكودكود PHP://+------------------------------------------------------------------+
//| Ambush |
//| Copyright, created 20 july 2012|
//| |
//| Desined by Ahmed Essam|
//| [email protected] |
//+------------------------------------------------------------------+
#property copyright "Ambush"
#property link "[email protected]"
extern int MaxTrades = 1; // ---------------- 1
extern int stoploss = 50; // ---------------- 2
extern int takeprofit = 50; // ---------------- 3
extern double TrailingStop =0; // ---------------- 4
extern bool UseHourTrade = false; // ---------------- 5
extern int FromHourTrade = 7; // ---------------- 6
extern int ToHourTrade = 17; // ---------------- 7
extern string MM_Parameters = "---------- Money Management";
extern double Lots = 0.01;
extern bool MM = false, // ---------------- 8
AccountIsMicro = true;
extern int Risk = 10; // ---------------- 9
int MagicNumber=148; // -------------------- 10
extern int tenkansen=9;
extern int kijunsen=26;
extern int senkospan=52;
extern int shift=1;
extern int shift2=26;
//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS deinitialization function |
//+------------------------------------------------------------------+
void deinit() {
Comment("");
}
int orderscnt(){
int cnt=0;
for(int i =0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber()){
cnt++;
}
}
}
return(cnt);
}
//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Start function |
//+------------------------------------------------------------------+
int start()
{
if (UseHourTrade){
if(!(Hour()>=FromHourTrade&&Hour()<=ToHourTrade)){
Comment("Non-Trading Hours!");
return(0);
}
}
double Tenkan=iIchimoku(NULL,0,tenkansen,kijunsen,senkospan,MODE_TENKANSEN,shift);
double Kijun=iIchimoku(NULL,0,tenkansen,kijunsen,senkospan,MODE_KIJUNSEN,shift);
double Senkou=iIchimoku(NULL,0,tenkansen,kijunsen,senkospan,MODE_CHINKOUSPAN,1+kijunsen);
double Senkoua=iIchimoku(NULL,0,tenkansen,kijunsen,senkospan,MODE_SENKOUSPANA,shift);
double Senkouaplus=iIchimoku(NULL,0,tenkansen,kijunsen,senkospan,MODE_SENKOUSPANA,shift+27);
double Senkoub=iIchimoku(NULL,0,tenkansen,kijunsen,senkospan,MODE_SENKOUSPANB,shift);
double Senkoubplus=iIchimoku(NULL,0,tenkansen,kijunsen,senkospan,MODE_SENKOUSPANB,shift+27);
double Ichimoku_B=iCustom(Symbol(),0,"Ichimoku Trend Magic Histogram with Alert",1,shift);
double Ichimoku_S=iCustom(Symbol(),0,"Ichimoku Trend Magic Histogram with Alert",0,shift);
double sl,tp;
if(MM) Lots = subLotSize();
//-----------------buy&sell ----------------
if((Close[1]>Tenkan)&&(Close[1]>Kijun)&&(Close[1]>Senkoub)&&(Close[1]>Senkoua)&&(Ichimoku_B==3)&&(Senkou>Senkoubplus&&Senkou>Senkouaplus)){ // ------------------------ 22
if(orderscnt()<MaxTrades){
if(stoploss==0){sl=0;}else{sl=Ask-stoploss*Point;}
if(takeprofit==0){tp=0;}else{tp=Ask+takeprofit*Point;}
OrderSend(Symbol(),OP_BUY,Lots,Ask,2,sl,tp,"Ambush",MagicNumber,0,Blue);
PlaySound("Alert.wav");
}
}
if ((Close[1]<Tenkan)&&(Close[1]<Kijun)&&(Close[1]<Senkoua)&&(Close[1]<Senkoub)&&(Ichimoku_S==3)&&(Senkou<Senkoubplus&&Senkou<Senkouaplus)){ // ------------------------ 23
if(orderscnt()<MaxTrades){
if(stoploss==0){sl=0;}else{sl=Bid+stoploss*Point;}
if(takeprofit==0){tp=0;}else{tp=Bid-takeprofit*Point;}
OrderSend(Symbol(),OP_SELL,Lots,Bid,2,sl,tp,"Ambush",MagicNumber,0,Red);
PlaySound("Alert.wav");
}
}
//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS TrailingStop |
//+------------------------------------------------------------------+
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,
OrderTakeProfit(),0,Green);
return(0);
}
}
}
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,
OrderTakeProfit(),0,Red);
return(0);
}
}
}
return(0);
}
//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Money Managment |
//+------------------------------------------------------------------+
double subLotSize()
{
double lotMM = MathCeil(AccountFreeMargin() * Risk / 1000) / 100;
if(AccountIsMicro==false)
{
if(lotMM < 0.1) lotMM = Lots;
if((lotMM > 0.5) && (lotMM < 1)) lotMM = 0.5;
if(lotMM > 1.0) lotMM = MathCeil(lotMM);
if(lotMM > 100) lotMM = 100;
}
else
{
if(lotMM < 0.01) lotMM = Lots;
if(lotMM > 1.0) lotMM = MathCeil(lotMM);
if(lotMM > 100) lotMM = 100;
}
return (lotMM);
}
//+---------------------------------------------------------------------------------+
أستاذ أسامة
أنا سامع إن في دورة جديدة لتعليم البرمجة هتبدأ قريب
ياريت يا أستاذ أسامة تكلم الإدارة إن قبل الدورة الجديدة ما تبدأ يتعمل لنا محاضرة للمؤشرات
أو على الأقل لو مفيهاش تعب ليك ممكن تعمل لنا موضوع شرح برمجة مؤشر الله يكرمك
لإن إحنا الإسم مبرمجين وإحنا ما بنعرفش نبرمج مؤشرات
-------------------
انا تابعت الباك تست مرة أخرى ووجدت سبب المشكلة ، الصفقات التى يتم فتحها مع او قبل نهاية الاسبوع بـ يوم يتم إغلاقها مع نهاية يوم الجمعة وإغلاق السوق ، مثلا اذا تم فتح صفقة يوم الجمعة والمفترض الاكسيبرت يغلق الصفقة بعد 48 ساعة اى يوم الأحد ، يتم بدلا من ذلك الإغلاق يوم الجمعة ، وبالمثل ليوم الخميس .
وانا أريد وضع شرط حتى لايتم حدوث ذلك ، اى يتم إغلاق الصفقة يوم الاثنين مثلا وليس الجمعة
بعد اذنك استاذ اسامه اريد توضيح النقطة الخاصة بعمل الكيجن كاستوب لوس ويفضل تطبيقها على الكود المرفق للاكسبيرت بالمشاركة السابقة
واريد ان يغلق الاكسبيرت الصفقات فى حالة وجود شمعه كاملة فوق التنكن او تحته ( اغلاقها وافتتاحها) فوق التنكن فى حالة البيع وتحت التنكن فى حالة الشراء
وماهى فوائد اخفاء الهدف والاستوب لوس؟
وشكرااااااااا
إخفاء الهدف والاستوب مماثل لفكرة عمل مودفاى للأوردر ، وكلاهما يتم إستخدامهما حتى يعمل الاكسيبرت على منصات الـ ECN التى لاتسمح بوضع تارجت واستوب إلا بعد فتح الصفقة ، وإخفاء الهدف والاستوب مهم لمن يتعامل بواسطة الاسكالبينج أو يخشى ضرب الأستوبات بسبب البروكر أو إظهاره
استاذ اسامة ، انا وضعت دالة لإغلاق الصفقات التى يتم فتحها يوم الخميس او الجمعة فـ يوم محدد مثل الثلاثاء مثلا ، والدالة والشروط تعمل ولكن عند وضع شروط إغلاق الصفقات بعد مرور 48 ساعة مع الشروط السابقة ، يحدث تعارض ولاتعمل خاصية الإغلاق يوم الثلاثاء ويتم الإغلاق مثل ما سبق يوم الجمعة
تفضل الكود كامل مع إضافة خيار الأستوب لوز فوق أو تحت الكيجن وإغلاق الصفقات عند إغلاق شمعة فوق أو تحت الكيجن
كود PHP://+------------------------------------------------------------------+
//| Ambush |
//| Copyright, created 20 july 2012|
//| |
//| Desined by Ahmed Essam|
//| [email protected] |
//+------------------------------------------------------------------+
#property copyright "Ambush"
#property link "[email protected]"
extern int MaxTrades = 1; // ---------------- 1
extern int stoploss = 50; // ---------------- 2
extern bool UseKijunStopLoss=false;
extern int takeprofit = 50; // ---------------- 3
extern double TrailingStop =0; // ---------------- 4
extern bool UseHourTrade = false; // ---------------- 5
extern int FromHourTrade = 7; // ---------------- 6
extern int ToHourTrade = 17; // ---------------- 7
extern string MM_Parameters = "---------- Money Management";
extern double Lots = 0.01;
extern bool MM = false, // ---------------- 8
AccountIsMicro = true;
extern int Risk = 10; // ---------------- 9
int MagicNumber=148; // -------------------- 10
extern int tenkansen=9;
extern int kijunsen=26;
extern int senkospan=52;
extern int shift=1;
extern int shift2=26;
//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS deinitialization function |
//+------------------------------------------------------------------+
void deinit() {
Comment("");
}
int orderscnt(){
int cnt=0;
for(int i =0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber()){
cnt++;
}
}
}
return(cnt);
}
//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Start function |
//+------------------------------------------------------------------+
int start()
{
if (UseHourTrade){
if(!(Hour()>=FromHourTrade&&Hour()<=ToHourTrade)){
Comment("Non-Trading Hours!");
return(0);
}
}
double Tenkan=iIchimoku(NULL,0,tenkansen,kijunsen,senkospan,MODE_TENKANSEN,shift);
double Kijun=iIchimoku(NULL,0,tenkansen,kijunsen,senkospan,MODE_KIJUNSEN,shift);
double Senkou=iIchimoku(NULL,0,tenkansen,kijunsen,senkospan,MODE_CHINKOUSPAN,1+kijunsen);
double Senkoua=iIchimoku(NULL,0,tenkansen,kijunsen,senkospan,MODE_SENKOUSPANA,shift);
double Senkouaplus=iIchimoku(NULL,0,tenkansen,kijunsen,senkospan,MODE_SENKOUSPANA,shift+27);
double Senkoub=iIchimoku(NULL,0,tenkansen,kijunsen,senkospan,MODE_SENKOUSPANB,shift);
double Senkoubplus=iIchimoku(NULL,0,tenkansen,kijunsen,senkospan,MODE_SENKOUSPANB,shift+27);
double Ichimoku_B=iCustom(Symbol(),0,"Ichimoku Trend Magic Histogram with Alert",1,shift);
double Ichimoku_S=iCustom(Symbol(),0,"Ichimoku Trend Magic Histogram with Alert",0,shift);
if(Close[1]>Kijun)
{
CloseSellOrders();
}
if(Close[1]<Kijun)
{
CloseBuyOrders();
}
double sl,tp;
if(MM) Lots = subLotSize();
//-----------------buy&sell ----------------
if((Close[1]>Tenkan)&&(Close[1]>Kijun)&&(Close[1]>Senkoub)&&(Close[1]>Senkoua)&&(Ichimoku_B==3)&&(Senkou>Senkoubplus&&Senkou>Senkouaplus)){ // ------------------------ 22
if(orderscnt()<MaxTrades){
if(stoploss==0){sl=0;}else{sl=Ask-stoploss*Point;}
if(takeprofit==0){tp=0;}else{tp=Ask+takeprofit*Point;}
if(UseKijunStopLoss)sl=iIchimoku(Symbol(),0,9,26,52,MODE_KIJUNSEN,0)+5*Point;
OrderSend(Symbol(),OP_BUY,Lots,Ask,2,sl,tp,"Ambush",MagicNumber,0,Blue);
PlaySound("Alert.wav");
}
}
if ((Close[1]<Tenkan)&&(Close[1]<Kijun)&&(Close[1]<Senkoua)&&(Close[1]<Senkoub)&&(Ichimoku_S==3)&&(Senkou<Senkoubplus&&Senkou<Senkouaplus)){ // ------------------------ 23
if(orderscnt()<MaxTrades){
if(stoploss==0){sl=0;}else{sl=Bid+stoploss*Point;}
if(takeprofit==0){tp=0;}else{tp=Bid-takeprofit*Point;}
if(UseKijunStopLoss)sl=iIchimoku(Symbol(),0,9,26,52,MODE_KIJUNSEN,0)+5*Point;
OrderSend(Symbol(),OP_SELL,Lots,Bid,2,sl,tp,"Ambush",MagicNumber,0,Red);
PlaySound("Alert.wav");
}
}
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,
OrderTakeProfit(),0,Green);
return(0);
}
}
}
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,
OrderTakeProfit(),0,Red);
return(0);
}
}
}
return(0);
}
//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS TrailingStop |
//+------------------------------------------------------------------+
void CloseBuyOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3);
}
}
}
}
void CloseSellOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3);
}
}
}
}
//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Money Managment |
//+------------------------------------------------------------------+
double subLotSize()
{
double lotMM = MathCeil(AccountFreeMargin() * Risk / 1000) / 100;
if(AccountIsMicro==false)
{
if(lotMM < 0.1) lotMM = Lots;
if((lotMM > 0.5) && (lotMM < 1)) lotMM = 0.5;
if(lotMM > 1.0) lotMM = MathCeil(lotMM);
if(lotMM > 100) lotMM = 100;
}
else
{
if(lotMM < 0.01) lotMM = Lots;
if(lotMM > 1.0) lotMM = MathCeil(lotMM);
if(lotMM > 100) lotMM = 100;
}
return (lotMM);
}
//+---------------------------------------------------------------------------------+
استاذ اسامة ، النسخة الأخيرة من الاكسيبرت بالمرفقات تعمل بشكل أفضل ونادرا ماتظهر بعض الأخطـاء مثل
Order Send Error 146 ، Order Send Error 129 ، Order Send Error 128
ولكن على كل حال يتم فتح الصفقة اذا ظهر الخطـأ ، سؤالي هل يمكن التغاضى عن هذه الأخطـاء ، وحذف الكود الخاص بظهور الاليرت واترك النسخة كما هى لأنى تعبت من كثرة التعديلات على هذا الاكسيبرت