النتائج 1 إلى 8 من 8
- 25-05-2012, 11:50 AM #1
اخواني المبرمجين اريد الكود البرمجي الذي يقوم بالوظيفة الاتية
السلام عليكم
لنفرض اخواني انني وضعت 4 اوامر باي ستوب فوق السعر الحالي و اول اورد يبعد عن السعر الحالي 10 نقط والفرق بين كل امر و الثاني 10 نقط
اريد كود برمجي اضعه في الاكسبيرت يقوم بفعل الاتي :
عند تفعيل الاوردر الرابع اريد الاكسبيرت ان يقوم بوضع الستوب لوز للامر الثاني و الاول علي نقطة دخول الامر الثاني
مثال : لو ان السعر الان عند النقطة صفر ثم ارتفع السعر للنقطة 10 ثم للنقطة 20 ثم للنقطة 30 ثم للنقطة 40 في هذه الحالة سوف يقوم الاكسبيرت بفتح الاربع اوامر باي ستوب
انا اريده عندما يفتح الاوردر الرابع عند نقطة 40 ان يقوم بوضع ستوب الامر الاول المفتوح من نقطة 10 و الاوردر الثاني المفتوح من نقطة 20 علي دخول الاوردر الثاني (( نقطة 20 ))
فما هو الكود البرمجي لفعل هذا ؟؟؟
و جزاكم الله خيرا مقدما
- 25-05-2012, 05:54 PM #2
طب هوفيه اصلا كود يعمل كدة و لا مفيش اصلا ؟؟؟
- 25-05-2012, 06:36 PM #3
طبعا ممكن عمل هذا الشيء لكن صعب شوية
الفكرة كالتالي
1- وضع لكل امر ماجك نمبر خاص به وليكون 1,2,3,4
2- في كل مرة يتحرك السعر راح يكون لوب يبحث عن الامر الرابع الذي يكون الماجك نمبر له 4
اذا وجد هذا الامر يعمل لوب ثاني للوصول الى نقطة دخول الامر الثاني
3- يعمل لوب ثالث لاختيار الامر الاول وتعديل الستوب له وكذلك الامر الثاني وتعديل الستوب له حسب نقطة دخول الامر الثاني
يغلق اللوبات كالاتي
{
{
{
هذه هي الفكرة وارجو من احد الاخوة الاعزاء برمجتها
واعتذر شديد الاعتذار لعدم تمكني من البرمجة حاليا لاني مرهق جدا جدا جدا
تحياتي
سلام
- 25-05-2012, 06:41 PM #4
اذا كانت الاوامر مفتوحة بواسطة اكسبيرت يمكن ترقيم الماجك كما موضح اعلاه
اما اذا الاوامر يدوي ممكن عمل متغيرات للباي هي b1,b2,b3,b4 حيث يكون السعر الاقل للباي هو b1
للسيل هي s1,s2,s3,s4 حيث يكون السعر الاعلى للسيل هو s1
تحياتي
سلام
- 25-05-2012, 07:12 PM #5
- 27-05-2012, 06:35 PM #6
رد:اخواني المبرمجين اريد الكود البرمجي الذي يقوم بالوظيفة الاتية
أفهم من كلامك أنك تعرف كيفية التعامل مع وظائف ستدمجها في الاكسبرت
إذا
مكتبة ضمن الاكسبرت لترجمة الأخطاء
كود:#include <stderror.mqh> #include <stdlib.mqh>
كود:extern string comment="O-O"; extern int slippage=3; //---- extern double Take_Profit=50; extern double Stop_Loss=50; extern double lots = 0.01; extern int ten_pips=10;
كود:int tries=100; int DG; double PT,MD;
كود:int init() { DG=Digits; if(DG==3 || DG==5){PT=Point*10;MD=10;} else{PT=Point;MD=1;} return(0); }
كود:// OP_BUYSTOP OP_BUY int ret_1=buy_stop(1,1); //ret_1 first result, if(ret_1==2){int ret_2=buy_stop(2,2);} //ret_2 second result if(ret_2==3){int ret_3=buy_stop(3,3);} //ret_3 third result if(ret_3==4){int ret_4=buy_stop(4,4);} //ret_4 fourth result //---- if(looking_for_4(4,OP_BUY)>0) { buy_stop_loss(1); //first order magic number = 1 buy_stop_loss(2); //second Order magic number =2 } //---- //---- // OP_SELLSTOP OP_SELL int ret__1=sell_stop(-1,1); //ret__1 first result, if(ret__1==-2){int ret__2=sell_stop(-2,2);} //ret__2 second result if(ret__2==-3){int ret__3=sell_stop(-3,3);} //ret__3 third result if(ret__3==-4){int ret__4=sell_stop(-4,4);} //ret__4 fourth result //---- if(looking_for_4(-4,OP_SELL)>0) { sell_stop_loss(-1); //first order magic number = -1 sell_stop_loss(-2); //second Order magic number = -2 } //----
buy_stop لتعليق أمر شراء
sell_stop لتعليق أمر بيع
looking_for_4 للبحث إذا تفعل الامر المعلق الرابع و صار أمر سوق
buy_stop_loss وضع حد الخسارة لأوامر الشراء
sell_stop_loss وضع حد الخسارة لأوامر البيع
كود:int buy_stop(int in,int x)//first variable magic number second variable multiplier of 10 pips { int buystop_ticket=0; int number=0; if(ten_pips<MarketInfo(Symbol(),MODE_STOPLEVEL)){ten_pips=MarketInfo(Symbol(),MODE_STOPLEVEL);} //---- double ask=Ask + (ten_pips*x*PT); //double loss_stop=ask - (Stop_Loss*PT); double profit_take=ask + (Take_Profit*PT); //---- while(buystop_ticket<=0 && number<tries ) { while(!IsTradeAllowed())Sleep(500); RefreshRates(); buystop_ticket=OrderSend(Symbol(),OP_BUYSTOP,lots,ask,slippage*MD,0,profit_take,comment,in,0,Green); if(buystop_ticket<0){Print("Error opening buy stop! ",ErrorDescription(GetLastError())); number++;} } if(buystop_ticket<0){Print("Error Occured "+ErrorDescription(GetLastError()));} else if(buystop_ticket>0){return(in+1);} } //---- int sell_stop(int in,int x)//first variable magic number second variable multiplier of 10 pips { int sellstop_ticket=0; int number=0; //---- double bid=Bid - (ten_pips*x*PT); //double loss_stop=bid + (Stop_Loss*PT); double profit_take=bid - (Take_Profit*PT); //--- while(sellstop_ticket<=0 && number<tries ) { while(!IsTradeAllowed())Sleep(500); RefreshRates(); sellstop_ticket=OrderSend(Symbol(),OP_SELLSTOP,lots,bid,slippage*MD,0,profit_take,comment,in,0,Red); if(sellstop_ticket<0){Print("Error opening sell stop! ",ErrorDescription(GetLastError())); number++;} } if(sellstop_ticket<0){Print("Error Occured "+ErrorDescription(GetLastError()));} else if(sellstop_ticket>0){return(in-1);} } //---- int looking_for_4(int magic,int type) { RefreshRates(); int cnt=0; for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS)==true) { if(OrderSymbol()==Symbol()) { if(OrderMagicNumber()==magic && OrderType()==type) { cnt++; } } } } return(cnt); } //---- void buy_stop_loss(int magic) { RefreshRates(); for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS)==true) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic) { if(OrderType()==OP_BUY) { if(OrderStopLoss()==0) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask - (Stop_Loss*PT),OrderTakeProfit(),0,Red); return(0); } } } } } } //---- void sell_stop_loss(int magic) { RefreshRates(); for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS)==true) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic) { if(OrderType()==OP_SELL) { if(OrderStopLoss()==0) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid + (Stop_Loss*PT),OrderTakeProfit(),0,Red); return(0); } } } } } } //----
- 27-05-2012, 10:52 PM #7
وعليكم السلام ورحمة الله وبركاته
الفكره بسيطه وإذا فكرت ببساطه سوف تجد الحل
أولا أنت تريد وضع أربع أوامر معلقه كيف ستجعل الإكسبرت يعرف أن الأوامر المعلقه تفعلت كلها حتى يبدأ في تعديل الهدف ؟
سوف تقوم بعمل داله للبحث عن عدد الأوامر المعلقه والمفعله المفتوحه
كود PHP:int orderscnt(int type){
int cnt=0;
for(int i =0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()&&OrderType()==type && OrderMagicNumber()==MagicNumber){
cnt++;
}
}
}
return(cnt);
}
كود PHP:if(orderscnt(OP_BUYSTOP)==0&&orderscnt(OP_BUY)>=4)
كود PHP:void ModifyOrders(){
int modifiedorders;
for(int i =0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicNumber){
if(modifiedorders==2)break;
if(OrderStopLoss()!=OrderOpenPrice()){
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0);
modifiedorders++;
}
}
}
}
كود PHP:if(orderscnt(OP_BUYSTOP)==0&&orderscnt(OP_BUY)>=4)
{
ModifyOrders();
}
- 28-05-2012, 01:17 AM #8