1 مرفق
ورشة تطوير اكسبيرت للمضاعفات
اخوانى الأعزاء / السلام عليكم ورحمة الله وبركاته
ظللت فترة اطور فى اكسبيرت الشهباء للأأستاذ وضاح عطار .. وذلك حتى يعمل بثبات اوقات التذبذب لكن كان التذبذب هو الأقوى .
ومن ضمن مراحل التطوير كانت فى وضع مستويات لايتذبذب السعر عندها كثيرا
لذلك قمت باختيار المستويات الأخيرة للكماريلا L3 & L4 H3&H4
وجدت ان السعر لايتذبذب عند هذه المستويات كثيرا
مرفق اكسبيرت الشهباء مع اضافة خطوط الكمريلا ...
الأ ان ذلك لم يمنع ان التذبذب هو الأقوى ...فأدعو من خلال هذا الموضوع مبرمجينا الكرام لتطوير هذا الأكسبيرت وذلك لما لأكواد المضاعفات من تعقيد بأذن الله نتغلب عليه
والشكر مقدما لكل من يساهم فى التطوير
والسلام عليكم ورحمة الله وبركاته
رد: ورشة تطوير اكسبيرت للمضاعفات
:015::015::015::015::015::015:
اول متابعينك انشاء الله
رد: ورشة تطوير اكسبيرت للمضاعفات
متابعين معك وفي رأيي ممكن نضيف فلتر البولينجر باند لمعرفة أماكن الضيق السعري ع وإحتمال حدوث التذبذب عن طريق الفرق بين حدي البولينجر باند ما رأيك
رد: ورشة تطوير اكسبيرت للمضاعفات
اقتباس:
المشاركة الأصلية كتبت بواسطة khfa
:015::015::015::015::015::015:
اول متابعينك انشاء الله
زادت الورشة نورا بوجودك:eh_s(7):
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
متابعين معك وفي رأيي ممكن نضيف فلتر البولينجر باند لمعرفة أماكن الضيق السعري ع وإحتمال حدوث التذبذب عن طريق الفرق بين حدي البولينجر باند ما رأيك
فى البداية سعيد جدا لوجودك فى الورشة .ومنور ياباشا:eh_s(7):. اما عن البولينجرباند اعتقد تواجهنا كذا مشكلة باستخدامه ومن ضمنها :-
- ان البولينجر يكون قوى فى الأرتدادات وليس فى الأختراقات
- كماتعرف ان البولينجر فى البرمجة وبالذات الأوامر المعلقة يحتاج الى اوامر تتغير بتغيره ... وهذا اعتقد عند عمله برمجيا قد يكون مجهدا جدا .
سوف نمر على مراحل للوصول لأفضل اكسبيرت مضاعفات واولها بأذن الله سيكون وضع ستوب وهدف للأكسبيرت السابق ثم نأتى لأختيار النقاط البعيدة عن التبذبذب واقترحاتى هى :
- خط الستوك main عند بلوغه مستوى اكبر من 97 او اقل من 3
-وتوجد اقتراحات اخرى بالنسبة للخطوط التى ستستخدمها
ووضع ستوب يبدأ الأكسبيرت بعكس العمليات من عنده ووضع حصد ارباح " من وجهة نظرى سيكون مفيدا فى جعل حصد الأرباح اكبر قليلا من الخسارة "
فما رايك باستخدام الستوك لفترة مثلا 14 يفتح امر بيع اوشراء بسعر السوق وفى المقابل يفتح امر معلق مكان الستوب ؟
رد: ورشة تطوير اكسبيرت للمضاعفات
اقتباس:
المشاركة الأصلية كتبت بواسطة جرير
زادت الورشة نورا بوجودك:eh_s(7):
فى البداية سعيد جدا لوجودك فى الورشة .ومنور ياباشا:eh_s(7):. اما عن البولينجرباند اعتقد تواجهنا كذا مشكلة باستخدامه ومن ضمنها :-
- ان البولينجر يكون قوى فى الأرتدادات وليس فى الأختراقات
- كماتعرف ان البولينجر فى البرمجة وبالذات الأوامر المعلقة يحتاج الى اوامر تتغير بتغيره ... وهذا اعتقد عند عمله برمجيا قد يكون مجهدا جدا .
سوف نمر على مراحل للوصول لأفضل اكسبيرت مضاعفات واولها بأذن الله سيكون وضع ستوب وهدف للأكسبيرت السابق ثم نأتى لأختيار النقاط البعيدة عن التبذبذب واقترحاتى هى :
- خط الستوك main عند بلوغه مستوى اكبر من 97 او اقل من 3
-وتوجد اقتراحات اخرى بالنسبة للخطوط التى ستستخدمها
ووضع ستوب يبدأ الأكسبيرت بعكس العمليات من عنده ووضع حصد ارباح " من وجهة نظرى سيكون مفيدا فى جعل حصد الأرباح اكبر قليلا من الخسارة "
فما رايك باستخدام الستوك لفترة مثلا 14 يفتح امر بيع اوشراء بسعر السوق وفى المقابل يفتح امر معلق مكان الستوب ؟
نعم وهذا كان قصدي بالنسبه للبولينجر بما أن المضاعفات تعتمد على المضاعفات العكسيه ممكن نتجنب أوقات التذبذب وإحتمال الإرتداد بهذه الطريقه
على العموم إبدأ بالإستوكاستيك وبعدها نستمر في التطوير
رد: ورشة تطوير اكسبيرت للمضاعفات
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
نعم وهذا كان قصدي بالنسبه للبولينجر بما أن المضاعفات تعتمد على المضاعفات العكسيه ممكن نتجنب أوقات التذبذب وإحتمال الإرتداد بهذه الطريقه
على العموم إبدأ بالإستوكاستيك وبعدها نستمر في التطوير
مشكلة الأستوك عندى كانت فى ان التعامل معه لايتم على اساس انه خطين
لذلك عند تحقق امر البيع يضع امر شراء معلق بعد عدد معين من النقاط(وهو الستوب (متغير خارجى )
وعند تحقق امر الشراء يضع امر بيع معلق بعد عدد معين من النقاط(وهو الستوب (متغير خارجى)
وعند تحقق الهدف يتم الغاء الأوامر المعلقة
فمأرأيك يأخى بهذا الكود .... يحتاج الى حل برمجى
كود PHP:
STOM=iStochastic(NULL,PERIOD_H4,14,3,3,MODE_SMA,0,MODE_MAIN,0);
STOM1=iStochastic(NULL,PERIOD_H4,14,3,3,MODE_SMA,0,MODE_MAIN,1);
L0 = ????????;
H0 =?????????? ;
S2=(H0-L0);
if(S2/Point<=Max && S2/Point>=Min)
{
H=H0;
L=L0;
S=S2;
}
if(S/Point<=Max && S/Point>=Min)
{
if(STOM1<3 && STOM>3)
{
OpenBUYOrder(lot,L,Ask+S+(MorePips*Point),Magic);
}
if(STOM1>97 && STOM<97)
{
OpenSELLOrder(lot,H,Bid-S+(MorePips*Point),Magic);
}
}
return(0);
}
رد: ورشة تطوير اكسبيرت للمضاعفات
اخى mr.dollar
بعد محاولات لأدخال ستوب وتيك بروفيت ...لا لأعرف سر عدم استجابة هذا الكود
لكنى بعد محاولة وعمل باك تيست وجدت ان الأكسبيرت لايقوم بفتح اوامر معلقة كمابالصورة
http://img256.imageshack.us/img256/6739/48752842.png
كذلك قيم كل من H L S N هى قيم الأستوب والتيك بروفيت .. احتاج منها قيمتين فقط واحدة للأستوب والثانية للتيك بروفيت من فضلك ..وهذا اخر ماتم بالكود
كود PHP:
#property copyright "Eng. Waddah Attar"
#property link "[email protected]"
extern double FirstLots=0.01;
extern int L=50;
extern int H=50;
extern int S=50;
extern int N=50;
extern int MorePips=5;
extern double DoubleLot=2.2;
extern bool LotOptimized=true;
extern double Risk=1;
extern int LotMargin=1000;
extern int MagicNumber = 2009;
int t1;
int init()
{
return(0);
}
int deinit()
{
return(0);
}
int start()
{
Procces_1(MagicNumber);
return(0);
}
void OpenBUYOrder(double Lots,double Stoploss,double Takeprofit , int Magic)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Stoploss,Takeprofit,"",Magic,0,Green);
}
void OpenSELLOrder(double Lots,double Stoploss,double Takeprofit , int Magic)
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Stoploss,Takeprofit,"",Magic,0,Red);
}
int Procces_1(int Magic)
{
double slot,ssl,stp,tp,sl,lot;
double S,H,L;
double S0,H0,L0,H1;
double S1,C0,O0;
double S2,C1,O1;
if (MyRealOrdersTotal(Magic)==0 && MyPendingOrdersTotal(Magic)==1)
{
DeletePendingOrders(Magic);
return(0);
}
if (MyRealOrdersTotal(Magic)==0 && MyPendingOrdersTotal(Magic)==0 && Hour()>=8)
{
if(LotOptimized==false)
{
lot=FirstLots;
}
else
{
lot=NormalizeDouble((((AccountBalance()*Risk)/100)/LotMargin),2);
if(lot>MarketInfo(Symbol(),MODE_MAXLOT)) lot=MarketInfo(Symbol(),MODE_MAXLOT);
if(lot<MarketInfo(Symbol(),MODE_MINLOT)) lot=MarketInfo(Symbol(),MODE_MINLOT);
}
H0=iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0);
H1=iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,1);
S0=(H0-L0);
S1=(C0-O0);
S2=(O1-C1);
{
H=H0;
L=L0;
S=S0;
}
{
if(H1<3 &&H0>3)
{
OpenBUYOrder(lot,(L*Point),Ask+(S*Point)+(MorePips*Point),Magic);
}
if(H1>97 &&H0<97)
{
OpenSELLOrder(lot,(H*Point),Bid-(N*Point)+(MorePips*Point),Magic);
}
}
return(0);
}
if (MyRealOrdersTotal(Magic)==1 && MyPendingOrdersTotal(Magic)==0)
{
OrderSelect(t1,SELECT_BY_TICKET,MODE_TRADES);
slot=NormalizeDouble(OrderLots()*DoubleLot,2);
ssl=OrderStopLoss();
stp=OrderTakeProfit();
if(OrderType()==OP_BUY)
{
sl=OrderOpenPrice();
tp=OrderStopLoss()-(OrderTakeProfit()-OrderOpenPrice());
OrderSend(Symbol(),OP_SELLSTOP,slot,ssl,3,sl,tp-MorePips*Point,"",Magic,0,Red);
}
if (OrderType()==OP_SELL)
{
sl=OrderOpenPrice();
tp=OrderStopLoss()+(OrderOpenPrice()-OrderTakeProfit());
OrderSend(Symbol(),OP_BUYSTOP,slot,ssl,3,sl,tp+MorePips*Point,"",Magic,0,Green);
}
}
return(0);
}
int MyRealOrdersTotal(int Magic)
{
int c=0;
int total = OrdersTotal();
t1=-1;
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && OrderType()<=OP_SELL)
{
if (t1==-1)
{
t1=OrderTicket();
}
c++;
}
}
return(c);
}
int MyPendingOrdersTotal(int Magic)
{
int c=0;
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && OrderType()>OP_SELL)
{
c++;
}
}
return(c);
}
int DeletePendingOrders(int Magic)
{
int total = OrdersTotal();
for (int cnt = total - 1; cnt >= 0; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && OrderType()>OP_SELL)
{
OrderDelete(OrderTicket());
}
}
return(0);
}
فما رايك ؟
رد: ورشة تطوير اكسبيرت للمضاعفات
اقتباس:
المشاركة الأصلية كتبت بواسطة جرير
اخى mr.dollar
بعد محاولات لأدخال ستوب وتيك بروفيت ...لا لأعرف سر عدم استجابة هذا الكود
لكنى بعد محاولة وعمل باك تيست وجدت ان الأكسبيرت لايقوم بفتح اوامر معلقة كمابالصورة
http://img256.imageshack.us/img256/6739/48752842.png
كذلك قيم كل من H L S N هى قيم الأستوب والتيك بروفيت .. احتاج منها قيمتين فقط واحدة للأستوب والثانية للتيك بروفيت من فضلك ..وهذا اخر ماتم بالكود كود PHP:
#property copyright "Eng. Waddah Attar"
#property link "[email protected]"
extern double FirstLots=0.01;
extern int L=50;
extern int H=50;
extern int S=50;
extern int N=50;
extern int MorePips=5;
extern double DoubleLot=2.2;
extern bool LotOptimized=true;
extern double Risk=1;
extern int LotMargin=1000;
extern int MagicNumber = 2009;
int t1;
int init()
{
return(0);
}
int deinit()
{
return(0);
}
int start()
{
Procces_1(MagicNumber);
return(0);
}
void OpenBUYOrder(double Lots,double Stoploss,double Takeprofit , int Magic)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Stoploss,Takeprofit,"",Magic,0,Green);
}
void OpenSELLOrder(double Lots,double Stoploss,double Takeprofit , int Magic)
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Stoploss,Takeprofit,"",Magic,0,Red);
}
int Procces_1(int Magic)
{
double slot,ssl,stp,tp,sl,lot;
double S,H,L;
double S0,H0,L0,H1;
double S1,C0,O0;
double S2,C1,O1;
if (MyRealOrdersTotal(Magic)==0 && MyPendingOrdersTotal(Magic)==1)
{
DeletePendingOrders(Magic);
return(0);
}
if (MyRealOrdersTotal(Magic)==0 && MyPendingOrdersTotal(Magic)==0 && Hour()>=8)
{
if(LotOptimized==false)
{
lot=FirstLots;
}
else
{
lot=NormalizeDouble((((AccountBalance()*Risk)/100)/LotMargin),2);
if(lot>MarketInfo(Symbol(),MODE_MAXLOT)) lot=MarketInfo(Symbol(),MODE_MAXLOT);
if(lot<MarketInfo(Symbol(),MODE_MINLOT)) lot=MarketInfo(Symbol(),MODE_MINLOT);
}
H0=iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0);
H1=iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,1);
S0=(H0-L0);
S1=(C0-O0);
S2=(O1-C1);
{
H=H0;
L=L0;
S=S0;
}
{
if(H1<3 &&H0>3)
{
OpenBUYOrder(lot,(L*Point),Ask+(S*Point)+(MorePips*Point),Magic);
}
if(H1>97 &&H0<97)
{
OpenSELLOrder(lot,(H*Point),Bid-(N*Point)+(MorePips*Point),Magic);
}
}
return(0);
}
if (MyRealOrdersTotal(Magic)==1 && MyPendingOrdersTotal(Magic)==0)
{
OrderSelect(t1,SELECT_BY_TICKET,MODE_TRADES);
slot=NormalizeDouble(OrderLots()*DoubleLot,2);
ssl=OrderStopLoss();
stp=OrderTakeProfit();
if(OrderType()==OP_BUY)
{
sl=OrderOpenPrice();
tp=OrderStopLoss()-(OrderTakeProfit()-OrderOpenPrice());
OrderSend(Symbol(),OP_SELLSTOP,slot,ssl,3,sl,tp-MorePips*Point,"",Magic,0,Red);
}
if (OrderType()==OP_SELL)
{
sl=OrderOpenPrice();
tp=OrderStopLoss()+(OrderOpenPrice()-OrderTakeProfit());
OrderSend(Symbol(),OP_BUYSTOP,slot,ssl,3,sl,tp+MorePips*Point,"",Magic,0,Green);
}
}
return(0);
}
int MyRealOrdersTotal(int Magic)
{
int c=0;
int total = OrdersTotal();
t1=-1;
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && OrderType()<=OP_SELL)
{
if (t1==-1)
{
t1=OrderTicket();
}
c++;
}
}
return(c);
}
int MyPendingOrdersTotal(int Magic)
{
int c=0;
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && OrderType()>OP_SELL)
{
c++;
}
}
return(c);
}
int DeletePendingOrders(int Magic)
{
int total = OrdersTotal();
for (int cnt = total - 1; cnt >= 0; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && OrderType()>OP_SELL)
{
OrderDelete(OrderTicket());
}
}
return(0);
}
فما رايك ؟
بداية لاحظت في الكود
كود PHP:
H0=iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0);
H1=iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,1);
S0=(H0-L0);
S1=(C0-O0);
S2=(O1-C1);
{
H=H0;
L=L0;
S=S0;
}
{
if(H1<3 &&H0>3)
{
OpenBUYOrder(lot,(L*Point),Ask+(S*Point)+(MorePips*Point),Magic);
}
if(H1>97 &&H0<97)
{
OpenSELLOrder(lot,(H*Point),Bid-(N*Point)+(MorePips*Point),Magic);
}
}
فما هي فكرتك في إستخدام قيمة الأستوكاستيك كأستوب لوز وهدف !!!!!!!!!!
أم هو مجرد خطأ مطبعي:0023:
رد: ورشة تطوير اكسبيرت للمضاعفات
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
بداية لاحظت في الكود
كود PHP:
H0=iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0);
H1=iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,1);
S0=(H0-L0);
S1=(C0-O0);
S2=(O1-C1);
{
H=H0;
L=L0;
S=S0;
}
{
if(H1<3 &&H0>3)
{
OpenBUYOrder(lot,(L*Point),Ask+(S*Point)+(MorePips*Point),Magic);
}
if(H1>97 &&H0<97)
{
OpenSELLOrder(lot,(H*Point),Bid-(N*Point)+(MorePips*Point),Magic);
}
}
فما هي فكرتك في إستخدام قيمة الأستوكاستيك كأستوب لوز وهدف !!!!!!!!!!
أم هو مجرد خطأ مطبعي:0023:
فى البداية ابارك لك على الأشراف ..ويعلم الله مدى سعادتى لتوليك هذا المنصب
اما عن الفكرة فهى كالتالى
فى حال تفعيل اوردر يكون
حصد الأرباح عادى جدا بالباراميتر
ستوب (موجود بالباراميتر)= امر عكسى معلق
وكانت المشكلة البرمجية تتمثل فى
تعريف لغة الميتا بقيم الستوب والهدف .... لذلك كانت منك فكرة رائعة باستخدام الأمر المفتوح لتحديد الستوب والهدف
كود PHP:
double openorder = orderopenprice();
فمن خلال توجيهاتك وجدت الحل الآت واتمنى ان تخبرنى برأيك
هذا الحل هو تفاديا للأرقام الخاطئة الذى من الممكن ان ينتجها الأكسبيرت وهى
بالنسبة للشراء سيكون
كود PHP:
double openorder1= OrderOpenPrice()+(takeprofit*Point);
double openorder2= OrderOpenPrice()-(stoploss*Point);
اما بالنسبة للبيع فيكون
كود PHP:
double openorder3= OrderOpenPrice()-(takeprofit1*Point);
double openorder4= OrderOpenPrice()+(stoploss1*Point);
وبالطبع ستكون قيمة ستوب وستوب لوز1 متساوية بالباراميتر ويكون تيك بروفيت مساويا لتيك بروفيت1 بالباراميتر
فمارايك ؟
رد: ورشة تطوير اكسبيرت للمضاعفات
مشرفنا العزيز
قمت بأضافة الأكواد السابقة لكن احصل على اخطاء (رونج وايرور) متركزة فى الماجيك والأوردور توتال وقوس .ممااعتبره اشارة ايجابية لصحة الأضافات.. والعبد لله ضعيف فى السينتاكس للغة الميتا .. من فضلك تصحيح الكود ..واتمنى بأذن الله ان يختص جانب من دروسك حول الأخطاء النحوية للميتا وتصحيحها ..وجزاك الله خيرا
كود PHP:
#property copyright "Eng. Waddah Attar"
#property link "[email protected]"
extern string separator1="--------------take profit and stoploss";
extern int takproft=50;
extern int stp=50;
extern string separator2="---------------- other setting";
extern double FirstLots=0.01;
extern double DoubleLot=2.2;
extern bool LotOptimized=true;
extern double Risk=1;
extern int LotMargin=1000;
extern int MagicNumber = 2009;
int t1;
int init()
{
return(0);
}
int deinit()
{
return(0);
}
int start()
{
Procces_1(MagicNumber);
return(0);
}
void OpenBUYOrder(double Lots,double Stoploss,double Takeprofit , int Magic)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Stoploss,Takeprofit,"",Magic,0,Green);
}
void OpenSELLOrder(double Lots,double Stoploss,double Takeprofit , int Magic)
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Stoploss,Takeprofit,"",Magic,0,Red);
}
int Procces_1(int Magic)
{
double slot,ssl,stp,tp,sl,lot,ST,ST1,Y,M,N,C;
if (MyRealOrdersTotal(Magic)==0 && MyPendingOrdersTotal(Magic)==1)
{
DeletePendingOrders(Magic);
return(0);
}
if (MyRealOrdersTotal(Magic)==0 && MyPendingOrdersTotal(Magic)==0 && Hour()>=8)
{
if(LotOptimized==false)
{
lot=FirstLots;
}
else
{
lot=NormalizeDouble((((AccountBalance()*Risk)/100)/LotMargin),2);
if(lot>MarketInfo(Symbol(),MODE_MAXLOT)) lot=MarketInfo(Symbol(),MODE_MAXLOT);
if(lot<MarketInfo(Symbol(),MODE_MINLOT)) lot=MarketInfo(Symbol(),MODE_MINLOT);
}
ST=iStochastic(NULL,PERIOD_H4,14,3,3,MODE_SMA,0,MODE_MAIN,0);
ST1=iStochastic(NULL,PERIOD_H4,14,3,3,MODE_SMA,0,MODE_MAIN,1);
Y= OrderOpenPrice() +(takproft*Point);
M= OrderOpenPrice() -(stp*Point);
N= OrderOpenPrice() -(takproft*Point);
C= OrderOpenPrice() +(stp*Point);
if(ST1<3 && ST>3)
{
OpenBUYOrder(lot,M,Y,Magic);
}
if(ST1>97 && ST<97)
{
OpenSELLOrder(lot,C,N,Magic);
}
}
return(0);
}
if (MyRealOrdersTotal(Magic)==1 && MyPendingOrdersTotal(Magic)==0)
{
OrderSelect(t1,SELECT_BY_TICKET,MODE_TRADES);
slot=NormalizeDouble(OrderLots()*DoubleLot,2);
ssl=OrderStopLoss();
stp=OrderTakeProfit();
if(OrderType()==OP_BUY)
{
sl=OrderOpenPrice();
tp=OrderStopLoss()-(OrderTakeProfit()-OrderOpenPrice());
OrderSend(Symbol(),OP_SELLSTOP,slot,ssl,3,sl,tp,"",Magic,0,Red);
}
if (OrderType()==OP_SELL)
{
sl=OrderOpenPrice();
tp=OrderStopLoss()+(OrderOpenPrice()-OrderTakeProfit());
OrderSend(Symbol(),OP_BUYSTOP,slot,ssl,3,sl,tp,"",Magic,0,Green);
}
}
return(0);
}
int MyRealOrdersTotal(int Magic)
{
int c=0;
int total = OrdersTotal();
t1=-1;
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && OrderType()<=OP_SELL)
{
if (t1==-1)
{
t1=OrderTicket();
}
c++;
}
}
return(c);
}
int MyPendingOrdersTotal(int Magic)
{
int c=0;
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && OrderType()>OP_SELL)
{
c++;
}
}
return(c);
}
int DeletePendingOrders(int Magic)
{
int total = OrdersTotal();
for (int cnt = total - 1; cnt >= 0; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && OrderType()>OP_SELL)
{
OrderDelete(OrderTicket());
}
}
return(0);
}
رد: ورشة تطوير اكسبيرت للمضاعفات
اقتباس:
المشاركة الأصلية كتبت بواسطة جرير
مشرفنا العزيز
قمت بأضافة الأكواد السابقة لكن احصل على اخطاء (رونج وايرور) متركزة فى الماجيك والأوردور توتال وقوس .ممااعتبره اشارة ايجابية لصحة الأضافات.. والعبد لله ضعيف فى السينتاكس للغة الميتا .. من فضلك تصحيح الكود ..واتمنى بأذن الله ان يختص جانب من دروسك حول الأخطاء النحوية للميتا وتصحيحها ..وجزاك الله خيرا كود PHP:
#property copyright "Eng. Waddah Attar"
#property link "[email protected]"
extern string separator1="--------------take profit and stoploss";
extern int takproft=50;
extern int stp=50;
extern string separator2="---------------- other setting";
extern double FirstLots=0.01;
extern double DoubleLot=2.2;
extern bool LotOptimized=true;
extern double Risk=1;
extern int LotMargin=1000;
extern int MagicNumber = 2009;
int t1;
int init()
{
return(0);
}
int deinit()
{
return(0);
}
int start()
{
Procces_1(MagicNumber);
return(0);
}
void OpenBUYOrder(double Lots,double Stoploss,double Takeprofit , int Magic)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Stoploss,Takeprofit,"",Magic,0,Green);
}
void OpenSELLOrder(double Lots,double Stoploss,double Takeprofit , int Magic)
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Stoploss,Takeprofit,"",Magic,0,Red);
}
int Procces_1(int Magic)
{
double slot,ssl,stp,tp,sl,lot,ST,ST1,Y,M,N,C;
if (MyRealOrdersTotal(Magic)==0 && MyPendingOrdersTotal(Magic)==1)
{
DeletePendingOrders(Magic);
return(0);
}
if (MyRealOrdersTotal(Magic)==0 && MyPendingOrdersTotal(Magic)==0 && Hour()>=8)
{
if(LotOptimized==false)
{
lot=FirstLots;
}
else
{
lot=NormalizeDouble((((AccountBalance()*Risk)/100)/LotMargin),2);
if(lot>MarketInfo(Symbol(),MODE_MAXLOT)) lot=MarketInfo(Symbol(),MODE_MAXLOT);
if(lot<MarketInfo(Symbol(),MODE_MINLOT)) lot=MarketInfo(Symbol(),MODE_MINLOT);
}
ST=iStochastic(NULL,PERIOD_H4,14,3,3,MODE_SMA,0,MODE_MAIN,0);
ST1=iStochastic(NULL,PERIOD_H4,14,3,3,MODE_SMA,0,MODE_MAIN,1);
Y= OrderOpenPrice() +(takproft*Point);
M= OrderOpenPrice() -(stp*Point);
N= OrderOpenPrice() -(takproft*Point);
C= OrderOpenPrice() +(stp*Point);
if(ST1<3 && ST>3)
{
OpenBUYOrder(lot,M,Y,Magic);
}
if(ST1>97 && ST<97)
{
OpenSELLOrder(lot,C,N,Magic);
}
}
return(0);
}
if (MyRealOrdersTotal(Magic)==1 && MyPendingOrdersTotal(Magic)==0)
{
OrderSelect(t1,SELECT_BY_TICKET,MODE_TRADES);
slot=NormalizeDouble(OrderLots()*DoubleLot,2);
ssl=OrderStopLoss();
stp=OrderTakeProfit();
if(OrderType()==OP_BUY)
{
sl=OrderOpenPrice();
tp=OrderStopLoss()-(OrderTakeProfit()-OrderOpenPrice());
OrderSend(Symbol(),OP_SELLSTOP,slot,ssl,3,sl,tp,"",Magic,0,Red);
}
if (OrderType()==OP_SELL)
{
sl=OrderOpenPrice();
tp=OrderStopLoss()+(OrderOpenPrice()-OrderTakeProfit());
OrderSend(Symbol(),OP_BUYSTOP,slot,ssl,3,sl,tp,"",Magic,0,Green);
}
}
return(0);
}
int MyRealOrdersTotal(int Magic)
{
int c=0;
int total = OrdersTotal();
t1=-1;
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && OrderType()<=OP_SELL)
{
if (t1==-1)
{
t1=OrderTicket();
}
c++;
}
}
return(c);
}
int MyPendingOrdersTotal(int Magic)
{
int c=0;
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && OrderType()>OP_SELL)
{
c++;
}
}
return(c);
}
int DeletePendingOrders(int Magic)
{
int total = OrdersTotal();
for (int cnt = total - 1; cnt >= 0; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && OrderType()>OP_SELL)
{
OrderDelete(OrderTicket());
}
}
return(0);
}
سأطلع على الكود وأخبرك :eh_s(7):
ومنتظرين مشاركات الإخوه الفعاله لزياده فعالية الإكسبرت وبإذن الله موفق
رد: ورشة تطوير اكسبيرت للمضاعفات
مشرفنا العزيز
تم اضافة ستوب وهدف كالتالى
كود PHP:
OpenBUYOrder(lot,Ask-(stp*Point),Ask+(takproft*Point),Magic);
كود PHP:
OpenSELLOrder(lot,Bid+(stp*Point),Bid-(takproft*Point),Magic);
كود PHP:
#property copyright "Eng. Waddah Attar"
#property link "[email protected]"
extern string separator1="--------------take profit and stoploss";
extern double takproft=50;
extern double stp=50;
extern string separator2="---------------- other setting";
extern double FirstLots=0.01;
extern double DoubleLot=2.2;
extern bool LotOptimized=true;
extern double Risk=1;
extern int LotMargin=1000;
extern int MagicNumber = 2009;
int t1;
int init()
{
return(0);
}
int deinit()
{
return(0);
}
int start()
{
Procces_1(MagicNumber);
return(0);
}
void OpenBUYOrder(double Lots,double Stoploss,double Takeprofit , int Magic)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Stoploss,Takeprofit,"",Magic,0,Green);
}
void OpenSELLOrder(double Lots,double Stoploss,double Takeprofit , int Magic)
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Stoploss,Takeprofit,"",Magic,0,Red);
}
int Procces_1(int Magic)
{
double slot,ssl,stp,tp,sl,lot,ST,ST1,Y,M,N,C;
if (MyRealOrdersTotal(Magic)==0 && MyPendingOrdersTotal(Magic)==1)
{
DeletePendingOrders(Magic);
return(0);
}
if (MyRealOrdersTotal(Magic)==0 && MyPendingOrdersTotal(Magic)==0 && Hour()>=8)
{
if(LotOptimized==false)
{
lot=FirstLots;
}
else
{
lot=NormalizeDouble((((AccountBalance()*Risk)/100)/LotMargin),2);
if(lot>MarketInfo(Symbol(),MODE_MAXLOT)) lot=MarketInfo(Symbol(),MODE_MAXLOT);
if(lot<MarketInfo(Symbol(),MODE_MINLOT)) lot=MarketInfo(Symbol(),MODE_MINLOT);
}
ST=iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0);
ST1=iStochastic(NULL,0,14,3,3,MODE_SMA,0,MODE_MAIN,1);
if(ST1<15 && ST>15)
{
OpenBUYOrder(lot,Ask-(stp*Point),Ask+(takproft*Point),Magic);
}
if(ST1>85 && ST<85)
{
OpenSELLOrder(lot,Bid+(stp*Point),Bid-(takproft*Point),Magic);
}
return(0);
}
if (MyRealOrdersTotal(Magic)==1 && MyPendingOrdersTotal(Magic)==0)
{
OrderSelect(t1,SELECT_BY_TICKET,MODE_TRADES);
slot=NormalizeDouble(OrderLots()*DoubleLot,2);
ssl=OrderStopLoss();
stp=OrderTakeProfit();
if(OrderType()==OP_BUY)
{
sl=OrderOpenPrice();
tp=OrderStopLoss()-(OrderTakeProfit()-OrderOpenPrice());
OrderSend(Symbol(),OP_SELLSTOP,slot,ssl,3,sl,tp,"",Magic,0,Red);
}
if (OrderType()==OP_SELL)
{
sl=OrderOpenPrice();
tp=OrderStopLoss()+(OrderOpenPrice()-OrderTakeProfit());
OrderSend(Symbol(),OP_BUYSTOP,slot,ssl,3,sl,tp,"",Magic,0,Green);
}
}
return(0);
}
int MyRealOrdersTotal(int Magic)
{
int c=0;
int total = OrdersTotal();
t1=-1;
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && OrderType()<=OP_SELL)
{
if (t1==-1)
{
t1=OrderTicket();
}
c++;
}
}
return(c);
}
int MyPendingOrdersTotal(int Magic)
{
int c=0;
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && OrderType()>OP_SELL)
{
c++;
}
}
return(c);
}
int DeletePendingOrders(int Magic)
{
int total = OrdersTotal();
for (int cnt = total - 1; cnt >= 0; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && OrderType()>OP_SELL)
{
OrderDelete(OrderTicket());
}
}
return(0);
}
لكن عندك الباك تيست يظهر -- اوردر سند ايرور 130 و 4107
فهل يمكن معالجة اخطاء ارسال الأوامر؟
http://img641.imageshack.us/img641/5180/70820917.png
رد: ورشة تطوير اكسبيرت للمضاعفات
اقتباس:
المشاركة الأصلية كتبت بواسطة جرير
مشرفنا العزيز
تم اضافة ستوب وهدف كالتالى
كود PHP:
OpenBUYOrder(lot,Ask-(stp*Point),Ask+(takproft*Point),Magic);
كود PHP:
OpenSELLOrder(lot,Bid+(stp*Point),Bid-(takproft*Point),Magic);
كود PHP:
#property copyright "Eng. Waddah Attar"
#property link "[email protected]"
extern string separator1="--------------take profit and stoploss";
extern double takproft=50;
extern double stp=50;
extern string separator2="---------------- other setting";
extern double FirstLots=0.01;
extern double DoubleLot=2.2;
extern bool LotOptimized=true;
extern double Risk=1;
extern int LotMargin=1000;
extern int MagicNumber = 2009;
int t1;
int init()
{
return(0);
}
int deinit()
{
return(0);
}
int start()
{
Procces_1(MagicNumber);
return(0);
}
void OpenBUYOrder(double Lots,double Stoploss,double Takeprofit , int Magic)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Stoploss,Takeprofit,"",Magic,0,Green);
}
void OpenSELLOrder(double Lots,double Stoploss,double Takeprofit , int Magic)
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Stoploss,Takeprofit,"",Magic,0,Red);
}
int Procces_1(int Magic)
{
double slot,ssl,stp,tp,sl,lot,ST,ST1,Y,M,N,C;
if (MyRealOrdersTotal(Magic)==0 && MyPendingOrdersTotal(Magic)==1)
{
DeletePendingOrders(Magic);
return(0);
}
if (MyRealOrdersTotal(Magic)==0 && MyPendingOrdersTotal(Magic)==0 && Hour()>=8)
{
if(LotOptimized==false)
{
lot=FirstLots;
}
else
{
lot=NormalizeDouble((((AccountBalance()*Risk)/100)/LotMargin),2);
if(lot>MarketInfo(Symbol(),MODE_MAXLOT)) lot=MarketInfo(Symbol(),MODE_MAXLOT);
if(lot<MarketInfo(Symbol(),MODE_MINLOT)) lot=MarketInfo(Symbol(),MODE_MINLOT);
}
ST=iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0);
ST1=iStochastic(NULL,0,14,3,3,MODE_SMA,0,MODE_MAIN,1);
if(ST1<15 && ST>15)
{
OpenBUYOrder(lot,Ask-(stp*Point),Ask+(takproft*Point),Magic);
}
if(ST1>85 && ST<85)
{
OpenSELLOrder(lot,Bid+(stp*Point),Bid-(takproft*Point),Magic);
}
return(0);
}
if (MyRealOrdersTotal(Magic)==1 && MyPendingOrdersTotal(Magic)==0)
{
OrderSelect(t1,SELECT_BY_TICKET,MODE_TRADES);
slot=NormalizeDouble(OrderLots()*DoubleLot,2);
ssl=OrderStopLoss();
stp=OrderTakeProfit();
if(OrderType()==OP_BUY)
{
sl=OrderOpenPrice();
tp=OrderStopLoss()-(OrderTakeProfit()-OrderOpenPrice());
OrderSend(Symbol(),OP_SELLSTOP,slot,ssl,3,sl,tp,"",Magic,0,Red);
}
if (OrderType()==OP_SELL)
{
sl=OrderOpenPrice();
tp=OrderStopLoss()+(OrderOpenPrice()-OrderTakeProfit());
OrderSend(Symbol(),OP_BUYSTOP,slot,ssl,3,sl,tp,"",Magic,0,Green);
}
}
return(0);
}
int MyRealOrdersTotal(int Magic)
{
int c=0;
int total = OrdersTotal();
t1=-1;
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && OrderType()<=OP_SELL)
{
if (t1==-1)
{
t1=OrderTicket();
}
c++;
}
}
return(c);
}
int MyPendingOrdersTotal(int Magic)
{
int c=0;
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && OrderType()>OP_SELL)
{
c++;
}
}
return(c);
}
int DeletePendingOrders(int Magic)
{
int total = OrdersTotal();
for (int cnt = total - 1; cnt >= 0; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && OrderType()>OP_SELL)
{
OrderDelete(OrderTicket());
}
}
return(0);
}
لكن عندك الباك تيست يظهر -- اوردر سند ايرور 130 و 4107
فهل يمكن معالجة اخطاء ارسال الأوامر؟
http://img641.imageshack.us/img641/5180/70820917.png
مثل ما قلت لك راجع الداله OrderSend وحاول تتابع الأخطاء فيها وبإذن الله ستصل إلى الحل
رد: ورشة تطوير اكسبيرت للمضاعفات
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
مثل ما قلت لك راجع الداله OrderSend وحاول تتابع الأخطاء فيها وبإذن الله ستصل إلى الحل
مشرفنا العزيز
راجعت دالة Ordersend
كود PHP:
}
if (MyRealOrdersTotal(Magic)==1 && MyPendingOrdersTotal(Magic)==0)
{
OrderSelect(t1,SELECT_BY_TICKET,MODE_TRADES);
slot=NormalizeDouble(OrderLots()*DoubleLot,2);
ssl=OrderStopLoss();
stp=OrderTakeProfit();
if(OrderType()==OP_BUY)
{
sl=OrderOpenPrice();
tp=OrderStopLoss()-(OrderTakeProfit()-OrderOpenPrice());
OrderSend(Symbol(),OP_SELLSTOP,slot,ssl,3,sl,tp,"",Magic,0,Red);
}
if (OrderType()==OP_SELL)
{
sl=OrderOpenPrice();
tp=OrderStopLoss()+(OrderOpenPrice()-OrderTakeProfit());
OrderSend(Symbol(),OP_BUYSTOP,slot,ssl,3,sl,tp,"",Magic,0,Green);
}
}
return(0);
}
واعتقد ان الخطأ قد يكون فى الأمر نفسه .. فعند تحقق شروط الستوك يلزم امر عادى Sell Or
Buy
وكماترى ان الأمرين معلقين .... فكيف نستطيع صياغة هذه الفكرة برمجيا بحيث عند الشراء ماركت يفتح بيع معلق وعند البيع ماركت يفتح شراء معلق ؟