اخوانى هل هناك حل برمجى لهذه المشكلة ؟
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
1- ممكن لا يقبل البروكر الامر المعلق
فهل يمكن للاكسبيرت ان يعاود المحاولة مرارا وتكرارا الى ان يتم تعليق الامر؟
ارجو ارفاق الكود البرمجى ان وجد .
2- بعد نجاح تعليق الامر
ممكن ان لا ينفذ البروكر الامر المعلق لعدم توافق السعر .
فهل يمكن للاكسبيرت ان يحاول مرارا وتكرارا تنفيذ الامر المعلق حتى لو اعلى الباى ستوب بنقطة او اتنين واقل من السل ستوب بنقطة او اتنين ؟
ارجو ارفاق الكود البرمجى ان وجد .
3- فى بعض الشركات بيحصل انه بيظهرلك نافذة فيها السعر الجديد ويسألك هل تقبل السعر الجديد ام لا
فهل يمكن للاكسبيرت ان يختار نعم ؟
ارجو ارفاق الكود البرمجى ان وجد .
4- لو فى حل افضل من او اكسبيرت منفصل يتعامل مع الاوامر المعلقة ويحاول تنفيذها . ارجو ارفاقه
شكرا جزيلا
جزاكم الله خيرا
خالص تحياتى
رد:اخوانى هل هناك حل برمجى لهذه المشكلة ؟
أفهم من كلامك أنك تعرف كيفية التعامل مع وظائف ستدمجها في الاكسبرت
إذا
مكتبة ضمن الاكسبرت لترجمة الأخطاء
كود:
#include <stderror.mqh>
#include <stdlib.mqh>
المتغيرات الخارجية ستكون كالتالي
كود:
extern double Take_Profit=50;
extern double Stop_Loss=50;
extern double lots = 0.01;
extern string comment="O-O";
extern int slippage=3;
extern int magic=3333;
extern int pips=25;
المتغيرات العامة ستكون كالتالي
كود:
int tries=100;//عدد المحاولات
int DG;
double PT,MD;
الوظيفة init ستكون كالتالي
كود:
int init()
{
DG=Digits;
if(DG==3 || DG==5){PT=Point*10;MD=10;}
else{PT=Point;MD=1;}
return(0);
}
الوظائف هي
buy_stop لتعليق أمر شراء
sell_stop لتعليق أمر بيع
كود:
void buy_stop()
{
int buystop_ticket=0;
int number=0;
//----
if(pips<MarketInfo(Symbol(),MODE_STOPLEVEL)){pips=MarketInfo(Symbol(),MODE_STOPLEVEL);}
double ask=Ask + (pips*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,loss_stop,profit_take,comment,magic,0,Green);
if(buystop_ticket<0){Print("Error opening buy stop! ",ErrorDescription(GetLastError())); number++;}
}
if(buystop_ticket<0){Print("Error Occured "+ErrorDescription(GetLastError()));}
}
//----
void sell_stop()
{
int sellstop_ticket=0;
int number=0;
//----
if(pips<MarketInfo(Symbol(),MODE_STOPLEVEL)){pips=MarketInfo(Symbol(),MODE_STOPLEVEL);}
double bid=Bid - (pips*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,loss_stop,profit_take,comment,magic,0,Red);
if(sellstop_ticket<0){Print("Error opening sell stop! ",ErrorDescription(GetLastError())); number++;}
}
if(sellstop_ticket<0){Print("Error Occured "+ErrorDescription(GetLastError()));}
}
//----