مشاهدة النسخة كاملة : الموضوع المخصص للأسئلة البرمجية mql4
الصفحات :
1
2
[
3]
4
5
6
7
8
9
10
11
12
13
14
15
kira-h
03-09-2017, 02:59 AM
قصدك يعني شروط الدخول في الصفقات ولا ايه؟
نعم صحيح ،،،
sabil
03-09-2017, 03:13 PM
نعم صحيح ،،،
طيب ولو عايز اقيده بزوج معين مش يشتغل الا عليه ؟
لا اقصد طبعا انه يفتح صفقات على نفس الزوج لكن اقصد تقييد عمله بتركيبه على هذا الزوج
Aminox
03-09-2017, 04:07 PM
مثال لعمل أمر معلق عند سعر a
OrderSend(Symbol(),OP_BUYSTOP,Lots,a,3,0,0,"",MagicNumer,0,Blue);
مرحبا سيدي شكرا للإجابة نعم أنا أعلم هذا الكود
لكن سؤالي لك هو كيف أقوم بتعريف نقطة a
لنفترظ أننا وضعنا هذا الكود للأمر المعلق
OrderSend(Symbol(),OP_BUYSTOP,Lots,a,3,0,0,"",MagicNumer,0,Blue);
ما فائدته إن كانت a غير معرفة ... إذن سؤالي هو كيف لي أن اعرف a شكرا كثيرا أعتذر عن الإزعاج
kira-h
03-09-2017, 07:02 PM
مرحبا سيدي شكرا للإجابة نعم أنا أعلم هذا الكود
لكن سؤالي لك هو كيف أقوم بتعريف نقطة a
لنفترظ أننا وضعنا هذا الكود للأمر المعلق
OrderSend(Symbol(),OP_BUYSTOP,Lots,a,3,0,0,"",MagicNumer,0,Blue);
ما فائدته إن كانت a غير معرفة ... إذن سؤالي هو كيف لي أن اعرف a شكرا كثيرا أعتذر عن الإزعاج
سؤالك غير واضح اخي اشرح الفكرة حتى استطيع الفهم
إذا كانت a غير معرفة فسيحدث خطأ عدم قبول الأمر
kira-h
03-09-2017, 07:04 PM
طيب ولو عايز اقيده بزوج معين مش يشتغل الا عليه ؟
لا اقصد طبعا انه يفتح صفقات على نفس الزوج لكن اقصد تقييد عمله بتركيبه على هذا الزوج
مثال :
void OnTick()
{
if(Symbol()!="EURUSD")return;
///بقية الكود
}
يعني إذا كان الزوج الحالي مخالف لليورودولار لن يعمل الاكسبيرت
Aminox
03-09-2017, 08:18 PM
سؤالك غير واضح اخي اشرح الفكرة حتى استطيع الفهم
إذا كانت a غير معرفة فسيحدث خطأ عدم قبول الأمر
شكرا سيدي لابأس لقد توصلت إلى الحل
لدي سؤال أخر من فضلك
أريد أن أقول للإكسبيرت إذا تم ضرب ستوب لوز لعملية Buy قم بوضع أمر معلق في نقطة X
كيف يمكنني كتابة هذا الكود
شكرا لك ولمجهودك سيدي
أبو عمر
03-09-2017, 10:39 PM
بسيطة أخي ستستخدم شرط شكل الشمعة
مثال :
double dn_price,up_price;
if(Close[i]>Open[i])dn_price=Open[i];up_price=Close[i];
if(Close[i]<Open[i])dn_price=Close[i];up_price=Open[i];
شكراً لك أخي
لكن كيف أعبر عن السعر السفلي لكل شمعة
يعني مثلاً اذا كان الشرط كالتالي :
مجموع الأسعار السفلية للشمعتين 1 و2 تقسيم مجموع الأسعار السفلية للشمعات 3 4 5
كيف يمكن كتابة هذا الشرط
صياد الجراح
04-09-2017, 12:32 AM
بسم الله الرحمن الرحيم
استاذ حسن .. تحية من القلب
مع العمل على الاكسيبرت تقاطع الموفينج والاستوك اللى حضرتك شرحته مفصل
شد انتباهى ان حضرتك قمت بتعريف المتغيرات الداخلية فى الدالة الرئيسية OnTick
void OnTick()
{
//----- تعريف المتغيرات الداخلية
int tk;
double TP,SL,
ايه السبب ان حضرتك قمت بوضعها تحت الدالة الرئيسية ؟
وهل اذا قمت بوضعها فى المنطقة الرئيسية للمتغيرات الداخلية وقمت بحذفها من دالة void OnTickيؤثر على عمل الاكسبرت ؟
.
.
لك ودى وتقديرى
sabil
04-09-2017, 03:57 AM
مثال :
void OnTick()
{
if(Symbol()!="EURUSD")return;
///بقية الكود
}
يعني إذا كان الزوج الحالي مخالف لليورودولار لن يعمل الاكسبيرت
يبقى الشكل النهائي للكود يكون ازاي ؟
يعني زوج معين وفريم معين مع شرط دخول تمثيلي كالتالي ...
system_2==true&&ppc(2,1)!=EMPTY_VALUE&&ppc(0,2)!=EMPTY_VALUE
Aminox
04-09-2017, 02:25 PM
مرحبا سيدي
أريد أن أقول للإكسبيرت عند بداية العمل قم بفتح صفقة BUY
(...............) if
ما الذي سوف أكتب بين القوسين
شكرا لك
kira-h
04-09-2017, 05:24 PM
بسم الله الرحمن الرحيم
استاذ حسن .. تحية من القلب
مع العمل على الاكسيبرت تقاطع الموفينج والاستوك اللى حضرتك شرحته مفصل
شد انتباهى ان حضرتك قمت بتعريف المتغيرات الداخلية فى الدالة الرئيسية OnTick
void OnTick()
{
//----- تعريف المتغيرات الداخلية
int tk;
double TP,SL,
ايه السبب ان حضرتك قمت بوضعها تحت الدالة الرئيسية ؟
وهل اذا قمت بوضعها فى المنطقة الرئيسية للمتغيرات الداخلية وقمت بحذفها من دالة void OnTickيؤثر على عمل الاكسبرت ؟
.
.
لك ودى وتقديرى
لا يوجد فرق بين الحالتين فكلاهما يؤدي نفس المهمة بتعريف المتغيرات، إلا إذا تحتاج استخدام تلك المتغيرات بشروط أخرى
مثل tk عندما تخالف قيمتها الاصلية الصفرية معناه تم فتح الصفقة
فإذا كانت tk خارج الدوال ستضل قيمة tk غير صفرية بعد فتح اول صفقة، بينما إذا كانت بداخل الدالة الرئيسية فستعود tk إلى قيمتها الصفرية،
وهذه القيم ممكن تحتاجها في شروط اخرى مثل معرفة سبب عدم فتح الصفقة
وهكذا ببقية المتغيرات
boubakeur
06-09-2017, 11:20 PM
وعليكم السلام وعيد مبارك سعيد
مرفق الكود
input bool EnableTimeFilter=false;
input string Start_Hour="00:00";
input string End_Hour="23:00";
extern int MagicNumber=10001;
extern double Lots =0.1;
extern double StopLoss=0;
extern double TakeProfit=0;
extern int TrailingStop=0,
BreakEven=0,
BreakEvenPips=0;
extern int Slippage=3;
input bool Use_CCI = true;
input int CCI_Period = 14,
CCI_Price= PRICE_CLOSE,
CCI_Level_1 = 100,
CCI_Level_2 = -100;
input bool Use_Rsi = true;
input int RSI_Period = 14,
RSI_Price = PRICE_CLOSE,
RSI_level_1= 40,
RSI_level_2= 45,
RSI_level_3= 55,
RSI_level_4= 60;
bool TimeFilter(string StartH,string EndH)
{
datetime Start=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + StartH);
datetime End=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + EndH);
if(!(Time[0]>=Start&&Time[0]<=End))
{
return(false);
}
return(true);
}
//+------------------------------------------------------------------+
// expert start function
//+------------------------------------------------------------------+
int start()
{
int cnt;
bool s;
double MyPoint=Point;
if(Digits==3 || Digits==5) MyPoint=Point*10;
//-----
if(BreakEven>0)
{
for(cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
if(sy==Symbol()&&mn==MagicNumber&&ot<=OP_SELL)
{
if(ot==OP_BUY)
{
if(NormalizeDouble((Bid-op),Digits)>BreakEven*MyPoint)
{
if((NormalizeDouble((sl-op),Digits)<0)||(sl==0))
{
s=OrderModify(tk,op,NormalizeDouble(op+BreakEvenPi ps*MyPoint,Digits),tp,0,Blue);
}
}
}
else
{
if(NormalizeDouble((op-Ask),Digits)>BreakEven*MyPoint)
{
if((NormalizeDouble((op-sl),Digits)<0)||(sl==0))
{
s=OrderModify(tk,op,NormalizeDouble(op-BreakEvenPips*MyPoint,Digits),tp,0,Red);
}
}
}
}
}
}
for(cnt=0;cnt<OrdersTotal();cnt++)
{
s= OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL &&
OrderSymbol()==Symbol() &&
OrderMagicNumber()==MagicNumber
)
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
{
if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
{
s=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else
{
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
{
if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
{
s=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+M yPoint*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
if(EnableTimeFilter&&TimeFilter(Start_Hour,End_Hour)==false)return(0);
double TheStopLoss=0;
double TheTakeProfit=0;
if( TotalOrdersCount()==0 )
{
int result=0;
if(((Use_CCI&&iCCI(Symbol(),0,CCI_Period,CCI_Price,2)<CCI_Level_1&&iCCI(Symbol(),0,CCI_Period,CCI_Price,1)>CCI_Level_1)||!Use_CCI)
&&((Use_Rsi&&iRSI(Symbol(),0,RSI_Period,RSI_Price,1)>RSI_level_3&&iRSI(Symbol(),0,RSI_Period,RSI_Price,1)<RSI_level_4)||!Use_Rsi)) // Here is your open buy rule
{
result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage ,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Blue);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
s=OrderSelect(result,SELECT_BY_TICKET);
s=OrderModify(OrderTicket(),OrderOpenPrice(),Norma lizeDouble(TheStopLoss,Digits),NormalizeDouble(The TakeProfit,Digits),0,Green);
}
return(0);
}
if(((Use_CCI&&iCCI(Symbol(),0,CCI_Period,CCI_Price,2)>CCI_Level_2&&iCCI(Symbol(),0,CCI_Period,CCI_Price,1)<CCI_Level_2)||!Use_CCI)
&&((iRSI(Symbol(),0,RSI_Period,RSI_Price,1)<RSI_level_1&&iRSI(Symbol(),0,RSI_Period,RSI_Price,1)>RSI_level_2)||!Use_Rsi)) // Here is your open Sell rule
{
result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippag e,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Red);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
s=OrderSelect(result,SELECT_BY_TICKET);
s=OrderModify(OrderTicket(),OrderOpenPrice(),Norma lizeDouble(TheStopLoss,Digits),NormalizeDouble(The TakeProfit,Digits),0,Green);
}
return(0);
}
}
return(0);
}
int TotalOrdersCount()
{
int result=0;
for(int i=0;i<OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
if (OrderMagicNumber()==MagicNumber) result++;
}
return (result);
}
بارك الله فيك أخي حسن و زادك الله من فضله
تم تصحيح جميع الاخطاء في الاكسبيرت (0 error(s), 0 warning(s), compile time: 299 msec) باستثناء أمرين وهما :
-خانة MaxLots لا تظهر في نافدة الاكسبيرت
-الامر الاخر هو اذا كان الستوب أو أخذ الربح صغير, الاكسبيرت يفتح أكثر من صفقة في شمعة الدخول
فأرجو أخي الكريم أن تدلني على الدالة التي تصحح هذا الخطأ و شكرا سلفا
و الصور المرفقة توضح الامر
2959
2960
kira-h
07-09-2017, 12:49 AM
بارك الله فيك أخي حسن و زادك الله من فضله
تم تصحيح جميع الاخطاء في الاكسبيرت (0 error(s), 0 warning(s), compile time: 299 msec) باستثناء أمرين وهما :
-خانة MaxLots لا تظهر في نافدة الاكسبيرت
-الامر الاخر هو اذا كان الستوب أو أخذ الربح صغير, الاكسبيرت يفتح أكثر من صفقة في شمعة الدخول
فأرجو أخي الكريم أن تدلني على الدالة التي تصحح هذا الخطأ و شكرا سلفا
و الصور المرفقة توضح الامر
...
مرفق التعديل
بالنسبة لـ MaxLots معناها أقصى لوت، فلا فائدة منها طالما تفتح كل الصفقات بلوت أساسي Lots!
input bool EnableTimeFilter=false;
input string Start_Hour="00:00";
input string End_Hour="23:00";
extern int MagicNumber=10001;
extern double Lots =0.1;
extern double StopLoss=0;
extern double TakeProfit=0;
extern int TrailingStop=0,
BreakEven=0,
BreakEvenPips=0;
extern int Slippage=3;
input bool Use_CCI = true;
input int CCI_Period = 14,
CCI_Price= PRICE_CLOSE,
CCI_Level_1 = 100,
CCI_Level_2 = -100;
input bool Use_Rsi = true;
input int RSI_Period = 14,
RSI_Price = PRICE_CLOSE,
RSI_level_1= 40,
RSI_level_2= 45,
RSI_level_3= 55,
RSI_level_4= 60;
datetime time;
bool TimeFilter(string StartH,string EndH)
{
datetime Start=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + StartH);
datetime End=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + EndH);
if(!(Time[0]>=Start&&Time[0]<=End))
{
return(false);
}
return(true);
}
//+------------------------------------------------------------------+
// expert start function
//+------------------------------------------------------------------+
int start()
{
int cnt;
bool s;
double MyPoint=Point;
if(Digits==3 || Digits==5) MyPoint=Point*10;
//-----
if(BreakEven>0)
{
for(cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
if(sy==Symbol()&&mn==MagicNumber&&ot<=OP_SELL)
{
if(ot==OP_BUY)
{
if(NormalizeDouble((Bid-op),Digits)>BreakEven*MyPoint)
{
if((NormalizeDouble((sl-op),Digits)<0)||(sl==0))
{
s=OrderModify(tk,op,NormalizeDouble(op+BreakEvenPi ps*MyPoint,Digits),tp,0,Blue);
}
}
}
else
{
if(NormalizeDouble((op-Ask),Digits)>BreakEven*MyPoint)
{
if((NormalizeDouble((op-sl),Digits)<0)||(sl==0))
{
s=OrderModify(tk,op,NormalizeDouble(op-BreakEvenPips*MyPoint,Digits),tp,0,Red);
}
}
}
}
}
}
for(cnt=0;cnt<OrdersTotal();cnt++)
{
s= OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
{
if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
{
s=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
}
}
}
}
else
{
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
{
if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
{
s=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+M yPoint*TrailingStop,OrderTakeProfit(),0,Red);
}
}
}
}
}
}
if(EnableTimeFilter&&TimeFilter(Start_Hour,End_Hour)==false)return(0);
double TheStopLoss=0;
double TheTakeProfit=0;
if( TotalOrdersCount()==0 )
{
int result=0;
if(((Use_CCI&&iCCI(Symbol(),0,CCI_Period,CCI_Price,2)<CCI_Level_1&&iCCI(Symbol(),0,CCI_Period,CCI_Price,1)>CCI_Level_1)||!Use_CCI)
&&((Use_Rsi&&iRSI(Symbol(),0,RSI_Period,RSI_Price,1)>RSI_level_3&&iRSI(Symbol(),0,RSI_Period,RSI_Price,1)<RSI_level_4)||!Use_Rsi)) // Here is your open buy rule
{
if(time!=Time[0])
{
result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage ,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Blue);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
s=OrderSelect(result,SELECT_BY_TICKET);
s=OrderModify(OrderTicket(),OrderOpenPrice(),Norma lizeDouble(TheStopLoss,Digits),NormalizeDouble(The TakeProfit,Digits),0,Green);
}
time=Time[0];
}
}
if(((Use_CCI&&iCCI(Symbol(),0,CCI_Period,CCI_Price,2)>CCI_Level_2&&iCCI(Symbol(),0,CCI_Period,CCI_Price,1)<CCI_Level_2)||!Use_CCI)
&&((iRSI(Symbol(),0,RSI_Period,RSI_Price,1)<RSI_level_1&&iRSI(Symbol(),0,RSI_Period,RSI_Price,1)>RSI_level_2)||!Use_Rsi)) // Here is your open Sell rule
{
if(time!=Time[0])
{
result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippag e,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Red);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
s=OrderSelect(result,SELECT_BY_TICKET);
s=OrderModify(OrderTicket(),OrderOpenPrice(),Norma lizeDouble(TheStopLoss,Digits),NormalizeDouble(The TakeProfit,Digits),0,Green);
}
time=Time[0];
}
}
}
return(0);
}
int TotalOrdersCount()
{
int result=0;
for(int i=0;i<OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
if (OrderMagicNumber()==MagicNumber) result++;
}
return (result);
}
boubakeur
07-09-2017, 03:07 AM
مرفق التعديل
بالنسبة لـ MaxLots معناها أقصى لوت، فلا فائدة منها طالما تفتح كل الصفقات بلوت أساسي Lots!
input bool EnableTimeFilter=false;
input string Start_Hour="00:00";
input string End_Hour="23:00";
extern int MagicNumber=10001;
extern double Lots =0.1;
extern double StopLoss=0;
extern double TakeProfit=0;
extern int TrailingStop=0,
BreakEven=0,
BreakEvenPips=0;
extern int Slippage=3;
input bool Use_CCI = true;
input int CCI_Period = 14,
CCI_Price= PRICE_CLOSE,
CCI_Level_1 = 100,
CCI_Level_2 = -100;
input bool Use_Rsi = true;
input int RSI_Period = 14,
RSI_Price = PRICE_CLOSE,
RSI_level_1= 40,
RSI_level_2= 45,
RSI_level_3= 55,
RSI_level_4= 60;
datetime time;
bool TimeFilter(string StartH,string EndH)
{
datetime Start=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + StartH);
datetime End=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + EndH);
if(!(Time[0]>=Start&&Time[0]<=End))
{
return(false);
}
return(true);
}
//+------------------------------------------------------------------+
// expert start function
//+------------------------------------------------------------------+
int start()
{
int cnt;
bool s;
double MyPoint=Point;
if(Digits==3 || Digits==5) MyPoint=Point*10;
//-----
if(BreakEven>0)
{
for(cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
if(sy==Symbol()&&mn==MagicNumber&&ot<=OP_SELL)
{
if(ot==OP_BUY)
{
if(NormalizeDouble((Bid-op),Digits)>BreakEven*MyPoint)
{
if((NormalizeDouble((sl-op),Digits)<0)||(sl==0))
{
s=OrderModify(tk,op,NormalizeDouble(op+BreakEvenPi ps*MyPoint,Digits),tp,0,Blue);
}
}
}
else
{
if(NormalizeDouble((op-Ask),Digits)>BreakEven*MyPoint)
{
if((NormalizeDouble((op-sl),Digits)<0)||(sl==0))
{
s=OrderModify(tk,op,NormalizeDouble(op-BreakEvenPips*MyPoint,Digits),tp,0,Red);
}
}
}
}
}
}
for(cnt=0;cnt<OrdersTotal();cnt++)
{
s= OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
{
if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
{
s=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
}
}
}
}
else
{
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
{
if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
{
s=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+M yPoint*TrailingStop,OrderTakeProfit(),0,Red);
}
}
}
}
}
}
if(EnableTimeFilter&&TimeFilter(Start_Hour,End_Hour)==false)return(0);
double TheStopLoss=0;
double TheTakeProfit=0;
if( TotalOrdersCount()==0 )
{
int result=0;
if(((Use_CCI&&iCCI(Symbol(),0,CCI_Period,CCI_Price,2)<CCI_Level_1&&iCCI(Symbol(),0,CCI_Period,CCI_Price,1)>CCI_Level_1)||!Use_CCI)
&&((Use_Rsi&&iRSI(Symbol(),0,RSI_Period,RSI_Price,1)>RSI_level_3&&iRSI(Symbol(),0,RSI_Period,RSI_Price,1)<RSI_level_4)||!Use_Rsi)) // Here is your open buy rule
{
if(time!=Time[0])
{
result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage ,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Blue);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
s=OrderSelect(result,SELECT_BY_TICKET);
s=OrderModify(OrderTicket(),OrderOpenPrice(),Norma lizeDouble(TheStopLoss,Digits),NormalizeDouble(The TakeProfit,Digits),0,Green);
}
time=Time[0];
}
}
if(((Use_CCI&&iCCI(Symbol(),0,CCI_Period,CCI_Price,2)>CCI_Level_2&&iCCI(Symbol(),0,CCI_Period,CCI_Price,1)<CCI_Level_2)||!Use_CCI)
&&((iRSI(Symbol(),0,RSI_Period,RSI_Price,1)<RSI_level_1&&iRSI(Symbol(),0,RSI_Period,RSI_Price,1)>RSI_level_2)||!Use_Rsi)) // Here is your open Sell rule
{
if(time!=Time[0])
{
result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippag e,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Red);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
s=OrderSelect(result,SELECT_BY_TICKET);
s=OrderModify(OrderTicket(),OrderOpenPrice(),Norma lizeDouble(TheStopLoss,Digits),NormalizeDouble(The TakeProfit,Digits),0,Green);
}
time=Time[0];
}
}
}
return(0);
}
int TotalOrdersCount()
{
int result=0;
for(int i=0;i<OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
if (OrderMagicNumber()==MagicNumber) result++;
}
return (result);
}
أشكرك جزيلا أخي
و اعذرني فانا لم أوضح الامر بشكل جيد بالنسبة ل MaxLots,
فأنا أقصد امكانية تحديد عدد الصفقات المسموح بفتحها على جميع الازواج في نفس الوقت,
باختصار الدالة التي أقصدها هي دالة (MaxTrades).
صياد الجراح
07-09-2017, 05:35 AM
لا يوجد فرق بين الحالتين فكلاهما يؤدي نفس المهمة بتعريف المتغيرات، إلا إذا تحتاج استخدام تلك المتغيرات بشروط أخرى
مثل tk عندما تخالف قيمتها الاصلية الصفرية معناه تم فتح الصفقة
فإذا كانت tk خارج الدوال ستضل قيمة tk غير صفرية بعد فتح اول صفقة، بينما إذا كانت بداخل الدالة الرئيسية فستعود tk إلى قيمتها الصفرية،
وهذه القيم ممكن تحتاجها في شروط اخرى مثل معرفة سبب عدم فتح الصفقة
وهكذا ببقية المتغيرات
بسم الله الرحمن الرحيم
بارك الله فيك اخى حسن ,,
استذانك فى شرح مبسط لدالتين .. أمتى نستخدمهم فى الاكسيبرت او هما مسئولين عن ايه داخل الاكسيبرت ؟
- عدد الصفقات المفتوحة (هل يتم وضعها لما احب اتحكم فى عدد الصفقات التى يقوم الاكسيبرت بفتحها ؟)
- اغلاق حسب نوع الصفقة ( لها علاقة باغلاق عكس الاشارة ام اغلاق الصفقات عموما ؟)
حاولت اجرب واقوم بالغائهم ..بس ماوصلت لشئ
.
.
* سؤال خارج الاكسيبرت خاص بالمؤشرات
حاليا قمت برمجة مؤشر اسهم .. محتاج اجعلوه لا يظهر الاشارة من نفس النوع غير بعد ظهور الاشارة العكسية
بمعنى يبقه شراء - بيع - شراء- بيع -شراء .. وهكذا
كيف يتم كتابه هذا الكود ؟؟
.
.
لك ودى وتقديرى
Ahmed
07-09-2017, 01:10 PM
السلام عليكم استاذ حسن
كيف اجعل الاكسبيرت يغلق كل الصفقات المفتوحة اذا وصلت الخسارة في الحساب 50 في المية من الرصيد الحالي الموجود
kira-h
07-09-2017, 09:06 PM
أشكرك جزيلا أخي
و اعذرني فانا لم أوضح الامر بشكل جيد بالنسبة ل MaxLots,
فأنا أقصد امكانية تحديد عدد الصفقات المسموح بفتحها على جميع الازواج في نفس الوقت,
باختصار الدالة التي أقصدها هي دالة (MaxTrades).
تم إضافتها بالكود المرفق
input bool EnableTimeFilter=false;
input string Start_Hour="00:00";
input string End_Hour="23:00";
extern int MagicNumber=10001;
input int MaxTrades=0;
extern double Lots =0.1;
extern double StopLoss=0;
extern double TakeProfit=0;
extern int TrailingStop=0,
BreakEven=0,
BreakEvenPips=0;
extern int Slippage=3;
input bool Use_CCI = true;
input int CCI_Period = 14,
CCI_Price= PRICE_CLOSE,
CCI_Level_1 = 100,
CCI_Level_2 = -100;
input bool Use_Rsi = true;
input int RSI_Period = 14,
RSI_Price = PRICE_CLOSE,
RSI_level_1= 40,
RSI_level_2= 45,
RSI_level_3= 55,
RSI_level_4= 60;
datetime time;
bool TimeFilter(string StartH,string EndH)
{
datetime Start=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + StartH);
datetime End=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + EndH);
if(!(Time[0]>=Start&&Time[0]<=End))
{
return(false);
}
return(true);
}
//+------------------------------------------------------------------+
// expert start function
//+------------------------------------------------------------------+
int start()
{
int cnt;
bool s;
double MyPoint=Point;
if(Digits==3 || Digits==5) MyPoint=Point*10;
//-----
if(BreakEven>0)
{
for(cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
if(sy==Symbol()&&mn==MagicNumber&&ot<=OP_SELL)
{
if(ot==OP_BUY)
{
if(NormalizeDouble((Bid-op),Digits)>BreakEven*MyPoint)
{
if((NormalizeDouble((sl-op),Digits)<0)||(sl==0))
{
s=OrderModify(tk,op,NormalizeDouble(op+BreakEvenPi ps*MyPoint,Digits),tp,0,Blue);
}
}
}
else
{
if(NormalizeDouble((op-Ask),Digits)>BreakEven*MyPoint)
{
if((NormalizeDouble((op-sl),Digits)<0)||(sl==0))
{
s=OrderModify(tk,op,NormalizeDouble(op-BreakEvenPips*MyPoint,Digits),tp,0,Red);
}
}
}
}
}
}
for(cnt=0;cnt<OrdersTotal();cnt++)
{
s= OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
{
if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
{
s=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
}
}
}
}
else
{
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
{
if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
{
s=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+M yPoint*TrailingStop,OrderTakeProfit(),0,Red);
}
}
}
}
}
}
if(EnableTimeFilter&&TimeFilter(Start_Hour,End_Hour)==false)return(0);
double TheStopLoss=0;
double TheTakeProfit=0;
if((MaxTrades>0&&TotalOrdersCount()<MaxTrades)||MaxTrades<=0)
{
int result=0;
if(((Use_CCI&&iCCI(Symbol(),0,CCI_Period,CCI_Price,2)<CCI_Level_1&&iCCI(Symbol(),0,CCI_Period,CCI_Price,1)>CCI_Level_1)||!Use_CCI)
&&((Use_Rsi&&iRSI(Symbol(),0,RSI_Period,RSI_Price,1)>RSI_level_3&&iRSI(Symbol(),0,RSI_Period,RSI_Price,1)<RSI_level_4)||!Use_Rsi)) // Here is your open buy rule
{
if(time!=Time[0])
{
result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage ,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Blue);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
s=OrderSelect(result,SELECT_BY_TICKET);
s=OrderModify(OrderTicket(),OrderOpenPrice(),Norma lizeDouble(TheStopLoss,Digits),NormalizeDouble(The TakeProfit,Digits),0,Green);
}
time=Time[0];
}
}
if(((Use_CCI&&iCCI(Symbol(),0,CCI_Period,CCI_Price,2)>CCI_Level_2&&iCCI(Symbol(),0,CCI_Period,CCI_Price,1)<CCI_Level_2)||!Use_CCI)
&&((iRSI(Symbol(),0,RSI_Period,RSI_Price,1)<RSI_level_1&&iRSI(Symbol(),0,RSI_Period,RSI_Price,1)>RSI_level_2)||!Use_Rsi)) // Here is your open Sell rule
{
if(time!=Time[0])
{
result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippag e,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Red);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
s=OrderSelect(result,SELECT_BY_TICKET);
s=OrderModify(OrderTicket(),OrderOpenPrice(),Norma lizeDouble(TheStopLoss,Digits),NormalizeDouble(The TakeProfit,Digits),0,Green);
}
time=Time[0];
}
}
}
return(0);
}
int TotalOrdersCount()
{
int result=0;
for(int i=0;i<OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
if (OrderMagicNumber()==MagicNumber) result++;
}
return (result);
}
kira-h
07-09-2017, 09:22 PM
بسم الله الرحمن الرحيم
بارك الله فيك اخى حسن ,,
استذانك فى شرح مبسط لدالتين .. أمتى نستخدمهم فى الاكسيبرت او هما مسئولين عن ايه داخل الاكسيبرت ؟
- عدد الصفقات المفتوحة (هل يتم وضعها لما احب اتحكم فى عدد الصفقات التى يقوم الاكسيبرت بفتحها ؟)// نعم للتحكم في عدد الصفقات
- اغلاق حسب نوع الصفقة ( لها علاقة باغلاق عكس الاشارة ام اغلاق الصفقات عموما ؟)//لها علاقة باغلاق عكس الاشارة أو إغلاق الصفقات حسب ما تريد
حاولت اجرب واقوم بالغائهم ..بس ماوصلت لشئ
.
.
* سؤال خارج الاكسيبرت خاص بالمؤشرات
حاليا قمت برمجة مؤشر اسهم .. محتاج اجعلوه لا يظهر الاشارة من نفس النوع غير بعد ظهور الاشارة العكسية
بمعنى يبقه شراء - بيع - شراء- بيع -شراء .. وهكذا
كيف يتم كتابه هذا الكود ؟؟
.
.
لك ودى وتقديرى
تم الرد بالاقتباس
بخصوص المؤشر تم إضافة شرط تبادل الاشارات بالنسخة التعليمية المرفقة
وذلك باضافة كومنت ثابت من نوع static string نسميه LastSignal مثلا
سنضع شرط إضافي ضمن شروط الشراء بأن الـ LastSignal يخالف "BUY" وبعد تحقق ما بداخل الحلقة (أي بعد تحقق الشروط) ستأخذ LastSignal الاسم "BUY" يعني أصبحت تساوي "BUY" وليس كما كانت تخالفه، وبهذا عند تحقق شروط الشراء مرة أخرى لن يكتمل الشرط لأنه سيجد ان LastSignal أصبحت تساوي "BUY"
بنفس الطريقة مع شروط البيع بمخالفته للقيمة "SELL" ثم بعد التنفيذ يساوي
وفي النهاية سنحصل على تبادل قيم LastSignal من الاسم "BUY" إلى الاسم "SELL" وبالتالي تتحقق شروط الشراء ثم البيع ثم الشراء...
المؤشر بالمرفق
kira-h
07-09-2017, 09:34 PM
السلام عليكم استاذ حسن
كيف اجعل الاكسبيرت يغلق كل الصفقات المفتوحة اذا وصلت الخسارة في الحساب 50 في المية من الرصيد الحالي الموجود
وعليكم السلام
مثال :
void OnTick()
{
if(AccountEquity()<=((AccountBalance()*50)/100))
{
bool close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
{
if(OrderType()==OP_BUY)close=OrderClose(OrderTicke t(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID) ,5);
if(OrderType()==OP_SELL)close=OrderClose(OrderTick et(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK ),5);
if(OrderType()>OP_SELL)close=OrderDelete(OrderTicket(),Red);
}
}
}
}
Ahmed
07-09-2017, 09:57 PM
جزاك الله خيرا اخي حسن
sabil
08-09-2017, 12:58 AM
اخي حسن الاكسبرت مش بينفذ الشروط كما اريد
واخص بالذكر system_1
من ناحية النصف الثاني من الشروط الـ ordercnt ... الخ
اما
system_2
يعمل جيداً اذا كان دالة الـ period خارج الحلقة لكن داخلها يحدث تضارب
وياريت كمان تضيف شرط الفريم وشرط الزوج اللي قولتلك عليها في المشاركات السابقة
forexEA
08-09-2017, 05:35 AM
السلام عليكم
كيف يحسب Risk في حساب ميكرو
مثال حساب ميكرو رصيد 100 دولار
أريد أن يفتح الصفقة الأولية بلوت 0.5 كم سأضع في الريسك ؟
Ahmed
08-09-2017, 10:01 AM
السلام عليكم استاذ حسن
لدي مجموعة صفقات مفتوحة منها صفقات رابحة ومنها صفقات خاسرة لكن المحصلة الكلية للصفقات ان الربح اكبر من الصفر
وفي حالة استخدام دالة اغلاق الصفقات اذا كان الربح اكبر من الصفر
يقوم الاكسبيرت باغلاق بعض الصفقات الرابحة ويترك الخاسرة دون اغلاق نتيجة البطئ في الاغلاق
استاذ حسن
هل يوجد حل برمجي لكي يغلق الاكسبيرت كل الصفقات المفتوحة في حالة كان الربح اكبر من الصفر حتى لو كان يوجد بعض من الصفقات خاسرة
صياد الجراح
08-09-2017, 01:15 PM
بسم الله الرحمن الرحيم
استاذ حسن .. تحية من القلب
قمت بعمل مؤشر لتطيبق تبادل الاشارات كما حضرتك شرحت .. بس لاسف لم احصل على تبادل الاشارات اكيد انا عامل حاجه غلط ..
ياريت تلقى نظرة على الكود المرفق وقول لى الخطأ فين لحصل على تبادل الاشارات شراء -بيع - شراء ...
أبو عمر
08-09-2017, 04:32 PM
شكراً لك أخي
لكن كيف أعبر عن السعر السفلي لكل شمعة
يعني مثلاً اذا كان الشرط كالتالي :
مجموع الأسعار السفلية للشمعتين 1 و2 تقسيم مجموع الأسعار السفلية للشمعات 3 4 5
كيف يمكن كتابة هذا الشرط
أخي حسن طلب بسيط جداً
طبعاً بناءً على جوابك السابق
فقط أريد أن تكتب لي الشرط التالي :
اذا كان مجموع السعر السفلي للشمعات 1 & 2 & 3 أصغر من ... نفيسة
أي شيء فقط أريد أن أرى كيف نكتب الشرط
أرجو ألا تتأخر علي بارك الله فيك
kira-h
08-09-2017, 05:41 PM
جزاك الله خيرا اخي حسن
وإياك اخي
بالتوفيق إن شاء الله
kira-h
08-09-2017, 05:42 PM
السلام عليكم
كيف يحسب Risk في حساب ميكرو
مثال حساب ميكرو رصيد 100 دولار
أريد أن يفتح الصفقة الأولية بلوت 0.5 كم سأضع في الريسك ؟
وعليكم السلام
يمكنك التجربة بالباكتيست
الاكسبيرت يحسب الريسك بطريقة رقمية ولا يهم نوع الحساب
kira-h
08-09-2017, 05:51 PM
السلام عليكم استاذ حسن
لدي مجموعة صفقات مفتوحة منها صفقات رابحة ومنها صفقات خاسرة لكن المحصلة الكلية للصفقات ان الربح اكبر من الصفر
وفي حالة استخدام دالة اغلاق الصفقات اذا كان الربح اكبر من الصفر
يقوم الاكسبيرت باغلاق بعض الصفقات الرابحة ويترك الخاسرة دون اغلاق نتيجة البطئ في الاغلاق
استاذ حسن
هل يوجد حل برمجي لكي يغلق الاكسبيرت كل الصفقات المفتوحة في حالة كان الربح اكبر من الصفر حتى لو كان يوجد بعض من الصفقات خاسرة
وعليكم السلام
ستقوم بإضافة متغير صحيح T ضمن شروط الاغلاق
مثال :
int T=0;
void OnTick()
{
if(Profit_By_USD()>0||T>0){CloseOrders();T++;}
if(Orderscnt()==0)T=0;
}
بحيث :
Profit_By_USD دالة الربح الاجمالي للصفقات المفتوحة
Orderscnt دالة إجمالي عدد الصفقات المفتوحة
CloseOrders دالة إغلاق جميع الصفقات
الفكرة هي عند تحقق شرط الاغلاق يتم إغلاق الصفقات و زيادة رقم بالعدد T يعني كان 0 فأصبح 1 ثم 2 ... المعبر عنها ++T
وإذا كان T أكبر من الصفر معناه تحقق الاغلاق فيتم الاغلاق مرة أخرى إذا في صفقات مفتوحة
ثم يليه عند عدم وجود أي صفقة مفتوحة (أي تم إغلاق كل الصفقات) يعود المتغير T إلى الصفر
kira-h
08-09-2017, 06:04 PM
بسم الله الرحمن الرحيم
استاذ حسن .. تحية من القلب
قمت بعمل مؤشر لتطيبق تبادل الاشارات كما حضرتك شرحت .. بس لاسف لم احصل على تبادل الاشارات اكيد انا عامل حاجه غلط ..
ياريت تلقى نظرة على الكود المرفق وقول لى الخطأ فين لحصل على تبادل الاشارات شراء -بيع - شراء ...
تم التعديل بالنسخة المرفقة
kira-h
08-09-2017, 06:15 PM
اخي حسن الاكسبرت مش بينفذ الشروط كما اريد
واخص بالذكر system_1
من ناحية النصف الثاني من الشروط الـ ordercnt ... الخ
اما
system_2
يعمل جيداً اذا كان دالة الـ period خارج الحلقة لكن داخلها يحدث تضارب
وياريت كمان تضيف شرط الفريم وشرط الزوج اللي قولتلك عليها في المشاركات السابقة
المرجو الشرح بتفصيل أكثر
sabil
08-09-2017, 07:10 PM
المرجو الشرح بتفصيل أكثر
كنت طلبت من حضرتك تعديل بخصوص الشروط في اكسبرت سابق وحضرتك عدلته لي في هذه المشاركة
http://www.fxprg.com/vb/showthread.php?t=31457&p=871834&viewfull=1#post871834
انا بقى عايز اعمل نفس الكلام ده في الاكسبرت الحالي المرفق فوق
وهو اني اخلي الاكسبرت مش يفتح شراء الا بعد بيع ومش يفتح بيع الا بعد شراء
لكن لما عملته في النسخة الحالية الدنيا باظت لاني اضفت سيستم 2 وعايز انسق بين سيستم 1 وسيستم 2
التعديل المطلوب هو سيستم 1 وهو جعل الاكسبرت لا يفتح بيع الا بعد شراء والعكس ايضاً
Ahmed
08-09-2017, 09:08 PM
مبدع والله استاذ حسن
بارك الله فبك ورزقك من حيث لا تحتسب
Ahmed
08-09-2017, 09:09 PM
وعليكم السلام
ستقوم بإضافة متغير صحيح T ضمن شروط الاغلاق
مثال :
int T=0;
void OnTick()
{
if(Profit_By_USD()>0||T>0){CloseOrders();T++;}
if(Orderscnt()==0)T=0;
}
بحيث :
Profit_By_USD دالة الربح الاجمالي للصفقات المفتوحة
Orderscnt دالة إجمالي عدد الصفقات المفتوحة
CloseOrders دالة إغلاق جميع الصفقات
الفكرة هي عند تحقق شرط الاغلاق يتم إغلاق الصفقات و زيادة رقم بالعدد T يعني كان 0 فأصبح 1 ثم 2 ... المعبر عنها ++T
وإذا كان T أكبر من الصفر معناه تحقق الاغلاق فيتم الاغلاق مرة أخرى إذا في صفقات مفتوحة
ثم يليه عند عدم وجود أي صفقة مفتوحة (أي تم إغلاق كل الصفقات) يعود المتغير T إلى الصفر
مبدع والله استاذ حسن
بارك الله فبك ورزقك من حيث لا تحتسب
kira-h
08-09-2017, 09:35 PM
كنت طلبت من حضرتك تعديل بخصوص الشروط في اكسبرت سابق وحضرتك عدلته لي في هذه المشاركة
http://www.fxprg.com/vb/showthread.php?t=31457&p=871834&viewfull=1#post871834
انا بقى عايز اعمل نفس الكلام ده في الاكسبرت الحالي المرفق فوق
وهو اني اخلي الاكسبرت مش يفتح شراء الا بعد بيع ومش يفتح بيع الا بعد شراء
لكن لما عملته في النسخة الحالية الدنيا باظت لاني اضفت سيستم 2 وعايز انسق بين سيستم 1 وسيستم 2
التعديل المطلوب هو سيستم 1 وهو جعل الاكسبرت لا يفتح بيع الا بعد شراء والعكس ايضاً
المطلوب غير واضح
عموما جرب النسخة المرفقة
kira-h
08-09-2017, 09:35 PM
مبدع والله استاذ حسن
بارك الله فبك ورزقك من حيث لا تحتسب
وإياك اخي
والله الموفق
sabil
08-09-2017, 11:45 PM
المطلوب غير واضح
عموما جرب النسخة المرفقة
جاري التجربة عند افتتاح السوق الاسبوع القادم
اما بخصوص المطلوب بالضبط
سأعيد الشرح مرة اخرى
ستجد في الاكسبرت المرفق نوعين من شروط الدخول مقسمة الى ...
system_1
system_2
.................
system_1
هو بالظبط هذا الاكسبرت
http://www.fxprg.com/vb/showthread.php?t=31457&p=871834&viewfull=1#post871834
بالنسبة للاكسبرت الموجود في الرابط يعمل جيدا بدون مشاكل
حيث لا يقوم بفتح بيع الا بعد شراء ولا يفتح شراء الا بعد بيع
اما في اكسبرت test 2 هذه الخاصية لا تعمل بشكل جيد حيث يقوم بفتح شراء ثم بيع ثم بيع ثم بيع ولا يفتح شراء مرة اخرى
لا اعلم اين الخلل بالظبط !!!
رغم ني نقلت الاكواد كما هي الى اكسبرت test 2 مع بعض التغييرات البسيطة التي تتناسب مع الشكل الجديد للاكسبرت
اما system_2 يعمل بدون مشاكل حيث انه يعمل على مؤشر خارجي
kira-h
09-09-2017, 05:40 PM
جاري التجربة عند افتتاح السوق الاسبوع القادم
اما بخصوص المطلوب بالضبط
سأعيد الشرح مرة اخرى
ستجد في الاكسبرت المرفق نوعين من شروط الدخول مقسمة الى ...
system_1
system_2
.................
system_1
هو بالظبط هذا الاكسبرت
http://www.fxprg.com/vb/showthread.php?t=31457&p=871834&viewfull=1#post871834
بالنسبة للاكسبرت الموجود في الرابط يعمل جيدا بدون مشاكل
حيث لا يقوم بفتح بيع الا بعد شراء ولا يفتح شراء الا بعد بيع
اما في اكسبرت test 2 هذه الخاصية لا تعمل بشكل جيد حيث يقوم بفتح شراء ثم بيع ثم بيع ثم بيع ولا يفتح شراء مرة اخرى
لا اعلم اين الخلل بالظبط !!!
رغم ني نقلت الاكواد كما هي الى اكسبرت test 2 مع بعض التغييرات البسيطة التي تتناسب مع الشكل الجديد للاكسبرت
اما system_2 يعمل بدون مشاكل حيث انه يعمل على مؤشر خارجي
الشروط بالاكسبيرت test2 لزوجين اليورو والفرنك، فهل تبادل الصفقات يكون لكل زوج على حدى أم للزوجين معا مثلا شراء يورو، بيع يورو، شراء فرنك، بيع يورو ؟
أبو عمر
09-09-2017, 06:47 PM
م حسن لم ترد علي !!?
هل من خطب .. أو السؤال في شيء ؟؟
sabil
09-09-2017, 07:45 PM
الشروط بالاكسبيرت test2 لزوجين اليورو والفرنك، فهل تبادل الصفقات يكون لكل زوج على حدى أم للزوجين معا مثلا شراء يورو، بيع يورو، شراء فرنك، بيع يورو ؟
نعم
كل زوج على حدة
شروط كل زوج منفصل عن الاخر
boubakeur
10-09-2017, 10:15 AM
تم إضافتها بالكود المرفق
input bool EnableTimeFilter=false;
input string Start_Hour="00:00";
input string End_Hour="23:00";
extern int MagicNumber=10001;
input int MaxTrades=0;
extern double Lots =0.1;
extern double StopLoss=0;
extern double TakeProfit=0;
extern int TrailingStop=0,
BreakEven=0,
BreakEvenPips=0;
extern int Slippage=3;
input bool Use_CCI = true;
input int CCI_Period = 14,
CCI_Price= PRICE_CLOSE,
CCI_Level_1 = 100,
CCI_Level_2 = -100;
input bool Use_Rsi = true;
input int RSI_Period = 14,
RSI_Price = PRICE_CLOSE,
RSI_level_1= 40,
RSI_level_2= 45,
RSI_level_3= 55,
RSI_level_4= 60;
datetime time;
bool TimeFilter(string StartH,string EndH)
{
datetime Start=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + StartH);
datetime End=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + EndH);
if(!(Time[0]>=Start&&Time[0]<=End))
{
return(false);
}
return(true);
}
//+------------------------------------------------------------------+
// expert start function
//+------------------------------------------------------------------+
int start()
{
int cnt;
bool s;
double MyPoint=Point;
if(Digits==3 || Digits==5) MyPoint=Point*10;
//-----
if(BreakEven>0)
{
for(cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
if(sy==Symbol()&&mn==MagicNumber&&ot<=OP_SELL)
{
if(ot==OP_BUY)
{
if(NormalizeDouble((Bid-op),Digits)>BreakEven*MyPoint)
{
if((NormalizeDouble((sl-op),Digits)<0)||(sl==0))
{
s=OrderModify(tk,op,NormalizeDouble(op+BreakEvenPi ps*MyPoint,Digits),tp,0,Blue);
}
}
}
else
{
if(NormalizeDouble((op-Ask),Digits)>BreakEven*MyPoint)
{
if((NormalizeDouble((op-sl),Digits)<0)||(sl==0))
{
s=OrderModify(tk,op,NormalizeDouble(op-BreakEvenPips*MyPoint,Digits),tp,0,Red);
}
}
}
}
}
}
for(cnt=0;cnt<OrdersTotal();cnt++)
{
s= OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
{
if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
{
s=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
}
}
}
}
else
{
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
{
if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
{
s=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+M yPoint*TrailingStop,OrderTakeProfit(),0,Red);
}
}
}
}
}
}
if(EnableTimeFilter&&TimeFilter(Start_Hour,End_Hour)==false)return(0);
double TheStopLoss=0;
double TheTakeProfit=0;
if((MaxTrades>0&&TotalOrdersCount()<MaxTrades)||MaxTrades<=0)
{
int result=0;
if(((Use_CCI&&iCCI(Symbol(),0,CCI_Period,CCI_Price,2)<CCI_Level_1&&iCCI(Symbol(),0,CCI_Period,CCI_Price,1)>CCI_Level_1)||!Use_CCI)
&&((Use_Rsi&&iRSI(Symbol(),0,RSI_Period,RSI_Price,1)>RSI_level_3&&iRSI(Symbol(),0,RSI_Period,RSI_Price,1)<RSI_level_4)||!Use_Rsi)) // Here is your open buy rule
{
if(time!=Time[0])
{
result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage ,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Blue);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
s=OrderSelect(result,SELECT_BY_TICKET);
s=OrderModify(OrderTicket(),OrderOpenPrice(),Norma lizeDouble(TheStopLoss,Digits),NormalizeDouble(The TakeProfit,Digits),0,Green);
}
time=Time[0];
}
}
if(((Use_CCI&&iCCI(Symbol(),0,CCI_Period,CCI_Price,2)>CCI_Level_2&&iCCI(Symbol(),0,CCI_Period,CCI_Price,1)<CCI_Level_2)||!Use_CCI)
&&((iRSI(Symbol(),0,RSI_Period,RSI_Price,1)<RSI_level_1&&iRSI(Symbol(),0,RSI_Period,RSI_Price,1)>RSI_level_2)||!Use_Rsi)) // Here is your open Sell rule
{
if(time!=Time[0])
{
result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippag e,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Red);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
s=OrderSelect(result,SELECT_BY_TICKET);
s=OrderModify(OrderTicket(),OrderOpenPrice(),Norma lizeDouble(TheStopLoss,Digits),NormalizeDouble(The TakeProfit,Digits),0,Green);
}
time=Time[0];
}
}
}
return(0);
}
int TotalOrdersCount()
{
int result=0;
for(int i=0;i<OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
if (OrderMagicNumber()==MagicNumber) result++;
}
return (result);
}
صراحة هذا المنتدى مميز عن كل المنتديات فتحية من القلب الى كل أفراده
الاخ حسن تم تعديل الاكسبيرت و أصبح خالي من الاخطاء فألف شكر لك على هذا الابداع
فقط لاحظت في الدالة الرئيسية في شروط البيع بالنسبة لمؤشر rsi لم تستعمل عبارة Use_Rsi في بداية دالة المؤشر ,فهل نسيتها أم أنها الطريقة الصحيحة
if(((Use_CCI&&iCCI(Symbol(),0,CCI_Period,CCI_Price,2)<CCI_Level_1&&iCCI(Symbol(),0,CCI_Period,CCI_Price,1)>CCI_Level_1)||!Use_CCI)
&&((Use_Rsiوجود عبارة &&iRSI(Symbol(),0,RSI_Period,RSI_Price,1)>RSI_level_3&&iRSI(Symbol(),0,RSI_Period,RSI_Price,1)<RSI_level_4)||!Use_Rsi)) // Here is your open buy rule
{
if(time!=Time[0])
{
result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage ,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Blue);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
s=OrderSelect(result,SELECT_BY_TICKET);
s=OrderModify(OrderTicket(),OrderOpenPrice(),Norma lizeDouble(TheStopLoss,Digits),NormalizeDouble(The TakeProfit,Digits),0,Green);
}
time=Time[0];
}
}
if(((Use_CCI&&iCCI(Symbol(),0,CCI_Period,CCI_Price,2)>CCI_Level_2&&iCCI(Symbol(),0,CCI_Period,CCI_Price,1)<CCI_Level_2)||!Use_CCI)
&&(( عدم وخود العبارة iRSI(Symbol(),0,RSI_Period,RSI_Price,1)<RSI_level_1&&iRSI(Symbol(),0,RSI_Period,RSI_Price,1)>RSI_level_2)||!Use_Rsi)) // Here is your open Sell rule
kira-h
10-09-2017, 10:38 PM
نعم
كل زوج على حدة
شروط كل زوج منفصل عن الاخر
مرفق الاكسبيرت
kira-h
10-09-2017, 11:01 PM
أخي حسن طلب بسيط جداً
طبعاً بناءً على جوابك السابق
فقط أريد أن تكتب لي الشرط التالي :
اذا كان مجموع السعر السفلي للشمعات 1 & 2 & 3 أصغر من ... نفيسة
أي شيء فقط أريد أن أرى كيف نكتب الشرط
أرجو ألا تتأخر علي بارك الله فيك
مثال
double dn1,up1,dn2,up2,dn3,up3;
if(Close[1]>Open[1])dn1=Open[1];up1=Close[1];
if(Close[1]<Open[1])dn1=Close[1];up1=Open[1];
if(Close[2]>Open[2])dn2=Open[2];up2=Close[2];
if(Close[2]<Open[2])dn2=Close[2];up2=Open[2];
if(Close[3]>Open[3])dn3=Open[3];up3=Close[3];
if(Close[3]<Open[3])dn3=Close[3];up3=Open[3];
if((dn1+dn2+dn3)>???)//--
if((up1+up2+up3)>???)//--
أبو عمر
11-09-2017, 12:45 PM
مثال
double dn1,up1,dn2,up2,dn3,up3;
if(Close[1]>Open[1])dn1=Open[1];up1=Close[1];
if(Close[1]<Open[1])dn1=Close[1];up1=Open[1];
if(Close[2]>Open[2])dn2=Open[2];up2=Close[2];
if(Close[2]<Open[2])dn2=Close[2];up2=Open[2];
if(Close[3]>Open[3])dn3=Open[3];up3=Close[3];
if(Close[3]<Open[3])dn3=Close[3];up3=Open[3];
if((dn1+dn2+dn3)>???)//--
if((up1+up2+up3)>???)//--
بارك الله فيك يا محترم
kira-h
11-09-2017, 05:45 PM
بارك الله فيك يا محترم
وإياك أخي الكريم
Ahmed
12-09-2017, 01:18 PM
السلام عليكم استاذ حسن
الرجاء شرح هذا الكود ومتى وكيف نستخدمة
string var1=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECOND S);
kira-h
12-09-2017, 04:44 PM
السلام عليكم استاذ حسن
الرجاء شرح هذا الكود ومتى وكيف نستخدمة
string var1=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECOND S);
وعليكم السلام
هذا الكود لتحويل التوقيت ( datetime Or int) إلى صيغة string بالتاريخ، الساعة، الدقيقة والثواني
يمكنك استخدام الكومنت لترى النتيجة على الشارت
Comment(var1);
من بين الاستخدامات مثلا توقيت بداية العمل :
input string Start_Time="08:00";
void OnTick
{
datetime Start=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + Start_Time);
if(TimeCurrent()>=Start)//---بقية الشروط
}
sabil
12-09-2017, 07:06 PM
مرفق الاكسبيرت
بعد التعديلات اصبح سيستم 1 يعمل بشكل جيد اما سيستم 2 اصبح لا يعمل
رغم ان قبل تعديلاتك سيستم 2 كان يعمل بشكل جيد اما سيستم 1 هو ما احتاج الى تعديل
ارجو حل المشكلة
kira-h
12-09-2017, 07:38 PM
بعد التعديلات اصبح سيستم 1 يعمل بشكل جيد اما سيستم 2 اصبح لا يعمل
رغم ان قبل تعديلاتك سيستم 2 كان يعمل بشكل جيد اما سيستم 1 هو ما احتاج الى تعديل
ارجو حل المشكلة
لم أعدل شيء بالسيستم 2
راجع الشروط بشكل منطقي
المهم لكي يعمل تبادل الاشارات تضع شروطها بحلقة جديدة مثلا كأن تضعها ضمن شروط التوقيت وعدد الصفقات وليس مع الشروط الأساسية والتي بها نظامين!
sabil
12-09-2017, 09:09 PM
لم أعدل شيء بالسيستم 2
راجع الشروط بشكل منطقي
المهم لكي يعمل تبادل الاشارات تضع شروطها بحلقة جديدة مثلا كأن تضعها ضمن شروط التوقيت وعدد الصفقات وليس مع الشروط الأساسية والتي بها نظامين!
طيب انا لغيت سيستم 2 خالص علشان اريح دماغي
المهم محتاج منك تعديل صغير
عايز اقيد عمل الاكسبرت بزوج معين وفريم معين على نفس الزوج
ارجو التعديل على الاكسبرت بالمرفقات
Ahmed
12-09-2017, 10:53 PM
وعليكم السلام
هذا الكود لتحويل التوقيت ( datetime Or int) إلى صيغة string بالتاريخ، الساعة، الدقيقة والثواني
يمكنك استخدام الكومنت لترى النتيجة على الشارت
Comment(var1);
من بين الاستخدامات مثلا توقيت بداية العمل :
input string Start_Time="08:00";
void OnTick
{
datetime Start=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + Start_Time);
if(TimeCurrent()>=Start)//---بقية الشروط
}
الف شكر استاذ حسن
بارك الله فيك
alsuultaan
13-09-2017, 02:24 PM
السلام عليكم ورحمة الله وبركاته و
وكل عام وانتم بخير
استاذ حسن
لدي سؤال بخصوص الدوال المثلثية مثل الساين والكوساين والتان فلناخذ التان على سبيل المثال
1 - تان (ظل) الزاوية يعني الضلع المقابل على الضلع المجاور للزاوية فمفروض ان قيمة التان للزاوية 45 تساوي 1 الصحيح ولكن عندما استعمل الدالة ( MathTan(45 فانها تعطيني نتيحة مختلفة حيث تعطيني =1.61977510954 فاين الخلل وكيف يمكن معالجته والدالة والمثال مرفق بالملف الاول
2- ما هي الدالة لاستخراج معكوس التان فمثلا لدي قية ظل الزاوية ولنفرض = .1.2 واردت معرفة الزوايه فما هي الدالة التي استخدمها
kira-h
13-09-2017, 06:16 PM
طيب انا لغيت سيستم 2 خالص علشان اريح دماغي
المهم محتاج منك تعديل صغير
عايز اقيد عمل الاكسبرت بزوج معين وفريم معين على نفس الزوج
ارجو التعديل على الاكسبرت بالمرفقات
الكود سليم ، فقط يوجد خطأ تقني بسيط تم إصلاحه بالنسخة المرفقة
kira-h
13-09-2017, 06:16 PM
الف شكر استاذ حسن
بارك الله فيك
بالتوفيق إن شاء الله
sabil
13-09-2017, 06:24 PM
الكود سليم ، فقط يوجد خطأ تقني بسيط تم إصلاحه بالنسخة المرفقة
تمام
لكن اخي حسن لم تفعل ما طلبته منك
عايز اقيد عمل الاكسبرت بفريم وزوج معين
ارجو عمل اللازم داخل الاكسبرت
kira-h
13-09-2017, 06:51 PM
السلام عليكم ورحمة الله وبركاته و
وكل عام وانتم بخير
استاذ حسن
لدي سؤال بخصوص الدوال المثلثية مثل الساين والكوساين والتان فلناخذ التان على سبيل المثال
1 - تان (ظل) الزاوية يعني الضلع المقابل على الضلع المجاور للزاوية فمفروض ان قيمة التان للزاوية 45 تساوي 1 الصحيح ولكن عندما استعمل الدالة ( MathTan(45 فانها تعطيني نتيحة مختلفة حيث تعطيني =1.61977510954 فاين الخلل وكيف يمكن معالجته والدالة والمثال مرفق بالملف الاول
2- ما هي الدالة لاستخراج معكوس التان فمثلا لدي قية ظل الزاوية ولنفرض = .1.2 واردت معرفة الزوايه فما هي الدالة التي استخدمها
وعليكم السلام
حسب ما أذكر النتيجة تكون بالـ radian وليس degré
عموما يمكنك مراجعة للوظائف الرياضية بلغة الـ MQL4 من هنا :
Math Functions (https://docs.mql4.com/math/mathtan)
ذات صلة:
الدوال المثلثية العكسية
(https://en.wikipedia.org/wiki/Inverse_trigonometric_functions)
ويمكن معرفة زاوية الترند باستخدام معادلة الميل كالتالي :
double price1=ObjectGet("Trend",OBJPROP_PRICE1);
double price2=ObjectGet("Trend",OBJPROP_PRICE2);
double Time1=iBarShift(Symbol(),0,ObjectGet("Trend",OBJPROP_TIME1),false);
double Time2=iBarShift(Symbol(),0,ObjectGet("Trend",OBJPROP_TIME2),false);
double price_diff=((price2-price1)/point);
double time_diff=(Time2-Time1);
double angle=MathArctan(price_diff/time_diff);
لكن في كل الحالات خاطئ حساب زاوية لمقياس رسم غير ثابت، فالنتائج لن تكون ثابته أبدا
يمكن التأكد من ذلك بتكبير الشارت وتصغيره سوف نجد أن الزاويه تتغير لنفس الترند
kira-h
13-09-2017, 07:01 PM
تمام
لكن اخي حسن لم تفعل ما طلبته منك
عايز اقيد عمل الاكسبرت بفريم وزوج معين
ارجو عمل اللازم داخل الاكسبرت
بسيطة ستقوم بحذف كل الشروط وحلقاتها التي تخص بقية الأزواج وتترك فقط الزوج الذي تريد
sabil
13-09-2017, 08:58 PM
بسيطة ستقوم بحذف كل الشروط وحلقاتها التي تخص بقية الأزواج وتترك فقط الزوج الذي تريد
هذه المشاركة للتذكرة
http://www.fxprg.com/vb/showthread.php?t=31457&p=872201&viewfull=1#post872201
alsuultaan
14-09-2017, 12:16 AM
شكرا جزيلا استاذ حسن كفيت ووفيت
انا عندي اطلاع كبير بالدول المثلثية لكن ما ينقصني هو دوال ال ام كي ال المتعلقة
وتعبت كثيرا بالبحث عن هذا الشئ بالكوكل ولكن لم اجد شئ متعلق
وفعلا مقياس الرسم المتغير مربك جدا
شكرا لاضافتك المهمه وساحاول عسى ان اصل لشئ
kira-h
14-09-2017, 12:30 AM
يبقى الشكل النهائي للكود يكون ازاي ؟
يعني زوج معين وفريم معين مع شرط دخول تمثيلي كالتالي ...
system_2==true&&ppc(2,1)!=EMPTY_VALUE&&ppc(0,2)!=EMPTY_VALUE
لم أفهم السؤال، وضح أكثر
kira-h
14-09-2017, 12:30 AM
شكرا جزيلا استاذ حسن كفيت ووفيت
انا عندي اطلاع كبير بالدول المثلثية لكن ما ينقصني هو دوال ال ام كي ال المتعلقة
وتعبت كثيرا بالبحث عن هذا الشئ بالكوكل ولكن لم اجد شئ متعلق
وفعلا مقياس الرسم المتغير مربك جدا
شكرا لاضافتك المهمه وساحاول عسى ان اصل لشئ
العفو اخي الكريم والله الموفق
sabil
14-09-2017, 06:09 PM
اخي حسن
هل يوجد دالة تفعل الاتي ....
لو عندي 10 صفقات بيع على اليورو دولار و 10 بيع على الدولار فرنك على اسعار مختلفة طبعا لكل اوردر في كل زوج
عايز انا بقى اعمل ايه ؟
لو انا مثلا عامل اكسبرت خدمي بيقفل الباسكت كله على 10 دولار ربح اللي هو بيع يورو دولار مع بيع دولار فرنك لكن في مثالنا فوق قدامنا الاسعار بتتحرك لكن الباسكت مش اتحقق وده هيعمل مشكلة في زيادة عدد الاوردرات المفتوحة
عايز انا بقى اقفل بعض اوردرات البيع في اليورو دولار مع بعض اوردرات البيع في الدولار فرنك بفارق 10 دولار ربح
ازاي ؟
مثلا السعر نزل بقوة لتحت ف اليورو دولار وصعد بقوة ف الدولار فرنك
هنا الزوج الكسبان "اليورو دولار" والخسران "الدولار فرنك"
هنا بقى الاكسبرت يتصرف ازاي ؟
هيقفل اكتر صفقة كسبانة في اليورو دولار مع اقل صفقة خسرانة في الدولار فرنك ويبقى بفارق 10 دولار او اكتر
طيب افرض اكتر صفقة كسبانة ع اليورو دولار عامل فرق 10 دولار ربح بمجموع 3 صفقات خسرانين ف الدولار فرنك !
بردو الاكسبرت يقفل اوردر اليورو دولار مع 3 اوردرات الدولار فرنك وهكذا
ويقفل بردو لو صفقتين او تلاتة ف الزوج مثلا مقابل صفقتين او اربعة او خمسة ... الخ ف الزوج المقابل بفارق 10 دولار ربح وهكذا وهكذا ...
نفس الشيء مع صفقات الشراء "شراء - شراء"
اسف ع الاطالة ولكن حبيت اشرح باستفاضة علشان تديني الدالة المناسبة
sal_moh85
15-09-2017, 08:45 PM
سلام عليكم اخ حسن مساعده في كتابة كود اوامر معلقه buystop && sell stop
حاولت كتير اني ساوي الكود بس يوجد به مشاكل
فكرة اكسبريت اوامر معلقه عند هاي ولو شمعة M15
وتحديد وقف الخساره على موشر ATR
وتحديد ربح صفقه ايضا على موشر ATR
وترينغ ستوب مخفي عن البروكر
وكود تحريك الامر معلق بعدد نقاط عند نزول وعند صعود
وشكرا جزيلا
kira-h
15-09-2017, 08:48 PM
سلام عليكم اخ حسن مساعده في كتابة كود اوامر معلقه buystop && sell stop
حاولت كتير اني ساوي الكود بس يوجد به مشاكل
فكرة اكسبريت اوامر معلقه عند هاي ولو شمعة M15
وتحديد وقف الخساره على موشر ATR
وتحديد ربح صفقه ايضا على موشر ATR
وترينغ ستوب مخفي عن البروكر
وكود تحريك الامر معلق بعدد نقاط عند نزول وعند صعود
وشكرا جزيلا
وعليكم السلام
هذا طلب اكسبيرت وليس سؤال برمجي
يمكنك فتح موضوع طلب بقسم برمجة المـؤشرات و الاكسبـيرتـات و برامـج التـداول فـي الفـوركس (http://www.fxprg.com/vb/forumdisplay.php?f=208)
sal_moh85
16-09-2017, 07:15 PM
وعليكم السلام
هذا طلب اكسبيرت وليس سؤال برمجي
يمكنك فتح موضوع طلب بقسم برمجة المـؤشرات و الاكسبـيرتـات و برامـج التـداول فـي الفـوركس (http://www.fxprg.com/vb/forumdisplay.php?f=208)
سلام عليكم اخ حسن طيب في مجال بس كود تحديد وقف الخساره على موشر atr
وشكرا
kira-h
17-09-2017, 01:00 AM
سلام عليكم اخ حسن طيب في مجال بس كود تحديد وقف الخساره على موشر atr
وشكرا
وعليكم السلام
المرجو التوضيح بمثال بالارقام
nuage
17-09-2017, 08:55 AM
السلام عليكم
ارجو مساعدتي في مراجعة هذا الكود، اعتقد انه صحيح كتابيا لكنه لا يقوم بفتح صفقات
bool Buy(string symbol)
{
double rsi1=iRSI(symbol,0,14,PRICE_CLOSE,0);
if(iOpen(symbol,0,0)<30&&iClose(symbol,0,0)>=30)return(true);
else return(false);
}
bool Sell(string symbol)
{
double rsi2=iRSI(symbol,0,14,PRICE_CLOSE,0);
if(iOpen(symbol,0,0)>70&&iClose(symbol,0,0)<=70)return(true);
else return(false);
}
صياد الجراح
17-09-2017, 02:35 PM
بسم الله الرحمن الرحيم
استاذ حسن تحية من القلب
انا بقوم حاليا بالتطيبق على عمل الاكسيبرت والحمد الله الاكسيبرت فتح الاوامر كماهو مطلوب .. حندخل الخطوة التالية والتعديل على الكود المرفق اللى حضرتك شرحت فيه :-
- محتاج اضافة خاصتين رئيسيين :-
1- اضافة المضاعفات عند اغلاق صفقة على خسارة مع معامل ضرب المضاعفة
2- عمل هدف فرعى للصفقة عند تحقيقه يقوم الاكسيبرت باغلاق نصف قيمة اللوت ونقل الاستوب على بعد نقط معين ( نتحكم فيها من الاعدادات الخارجية )من نقطة الدخول ( مع شرح مبسط لهذا الكود )
.
.
لك ودى وتقديرى
kira-h
17-09-2017, 07:36 PM
السلام عليكم ورحمة الله
استاذ حسن لو تكرمت انا بتعلم برمجه وقمت ببرمجة اكسبيريت يضع اوامر بيع وشراء معلقة بهدف واستوب ولوت لكل صفقة
ارغب في اضافة داله تقوم باعادة وضع اوامر معلقة للصفقات التي تحقق الهدف واغلقت وبنفس مكان سعر التي اغلقت واللوت والهدف والاستوب لوز
وعليكم السلام
ستقوم بعمل دالة حساب الصفقات المفعلة حسب النوع كالتالي :
int Orders(string type)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&MagicNo==OrderMagicNumber())
{
if(type=="Buy")
{
if(OrderType()==OP_BUY||OrderType()==OP_BUYSTOP||O rderType()==OP_BUYLIMIT)cnt++;
}
if(type=="Sell")
{
if(OrderType()==OP_SELL||OrderType()==OP_SELLSTOP| |OrderType()==OP_SELLLIMIT)cnt++;
}
}
}
}
return(cnt);
}
ثم دالة فتح الصفقة المغلقة كالتالي:
void OpenClosedOrders()
{
int tk;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
double lo=OrderLots(),
op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(Orders("Sell")>0&&Orders("Sell")<MaxSellOrders)
{
if(Bid<=op-3*point)
{
tk=OrderSend(Symbol(),OP_SELLLIMIT,lo,op,3,sl,tp,"Kira-h",MagicNo,0,Red);
}
if(Bid>=op+3*point)
{
tk=OrderSend(Symbol(),OP_SELLSTOP,lo,op,3,sl,tp,"Kira-h",MagicNo,0,Red);
}
}
if(Orders("Buy")>0&&Orders("Buy")<MaxBuyOrders)
{
if(Ask>=op+3*point)
{
tk=OrderSend(Symbol(),OP_BUYLIMIT,lo,op,3,sl,tp,"Kira-h",MagicNo,0,Green);
}
if(Ask<=op-3*point)
{
tk=OrderSend(Symbol(),OP_BUYSTOP,lo,op,3,sl,tp,"Kira-h",MagicNo,0,Green);
}
}
}
}
}
بحيث :
input int MaxBuyOrders=10,//أقصى عدد اوامر الشراء
MaxSellOrders=10;//أقصى عدد اوامر البيع
والشروط بالدالة الرئيسية :
void OnTick()
{
OpenClosedOrders();
}
nuage
17-09-2017, 09:19 PM
مساء الخير، هل سؤالي صعب اخي ام ليس له جواب؟؟؟ شكرا سلفا
kira-h
17-09-2017, 09:27 PM
السلام عليكم
ارجو مساعدتي في مراجعة هذا الكود، اعتقد انه صحيح كتابيا لكنه لا يقوم بفتح صفقات
bool Buy(string symbol)
{
double rsi1=iRSI(symbol,0,14,PRICE_CLOSE,0);
if(iOpen(symbol,0,0)<=30&&iClose(symbol,0,0)>=30)return(true);
else return(false);
}
bool Sell(string symbol)
{
double rsi2=iRSI(symbol,0,14,PRICE_CLOSE,0);
if(iOpen(symbol,0,0)>=70&&iClose(symbol,0,0)<=70)return(true);
else return(false);
}
وعليكم السلام
الصحيح كالتالي :
bool Buy(string symbol)
{
double rsi0=iRSI(symbol,0,14,PRICE_CLOSE,0),
rsi1=iRSI(symbol,0,14,PRICE_CLOSE,1);
if(rsi1<30&&rsi0>=30)return(true);
else return(false);
}
bool Sell(string symbol)
{
double rsi0=iRSI(symbol,0,14,PRICE_CLOSE,0),
rsi1=iRSI(symbol,0,14,PRICE_CLOSE,1);
if(rsi1>70&&irsi0<=70)return(true);
else return(false);
}
kira-h
17-09-2017, 09:38 PM
بسم الله الرحمن الرحيم
استاذ حسن تحية من القلب
انا بقوم حاليا بالتطيبق على عمل الاكسيبرت والحمد الله الاكسيبرت فتح الاوامر كماهو مطلوب .. حندخل الخطوة التالية والتعديل على الكود المرفق اللى حضرتك شرحت فيه :-
- محتاج اضافة خاصتين رئيسيين :-
1- اضافة المضاعفات عند اغلاق صفقة على خسارة مع معامل ضرب المضاعفة
2- عمل هدف فرعى للصفقة عند تحقيقه يقوم الاكسيبرت باغلاق نصف قيمة اللوت ونقل الاستوب على بعد نقط معين ( نتحكم فيها من الاعدادات الخارجية )من نقطة الدخول ( مع شرح مبسط لهذا الكود )
.
.
لك ودى وتقديرى
مرفق الاكسبيرت النسخة 2
شكرا لك استاذ حسن مبدع كعادتك
استاذ حسن هل هناك ملف على شكل اكسبيرت يجمع جميع الاكواد مع شرح كل داله لتكون مكتبه نستفيد منها وشكرا لك من الاعماق
nuage
18-09-2017, 09:45 AM
شكرا اخي سلمت يداك
لو سمحت احتاج شرط ترلينج ستوب ياخد اقل قيمة متاحة لكل عملة و اذا كانت القيمة اكبر من القيمة المحددة فيه ياخد القيمة الجديدة
بمعنى القيمة المحددة للتريلينج 5 ووجد في احد العملات القيمة 6 اريده ان يستبدل القيمة المحددة مسبقا بالقيمة الجديدة التي هي 6
ارجو ان يكون طلبي واضحاً مع الشكر والتقدير
boubakeur
18-09-2017, 10:09 PM
سلام عليكم اخ حسن
هذا مؤشر خاص(iCustom) حاولت أن أضع له شروط الدخول و لكن لم أنجح
هل بالامكان وضع شروط الدخول شراء لهذا المؤشر لما الخط الاخضر يقطع الخط الفضي صعودا و اغلاق شمعة
و شكرا مقدما3137
kira-h
18-09-2017, 11:47 PM
شكرا لك استاذ حسن مبدع كعادتك
استاذ حسن هل هناك ملف على شكل اكسبيرت يجمع جميع الاكواد مع شرح كل داله لتكون مكتبه نستفيد منها وشكرا لك من الاعماق
العفو أخي
يمكنك جمع ملف به كل الدوال والتطبيقات هنا وبالموضوع المثبث لاهم دوال وتطبيقات اللغة
وبالتوفيق إن شاء الله
nuage
20-09-2017, 12:26 AM
مساء الخير، استاذي العزيز لازلت بانتظار ان تتفضل علي بجوابك، و اريد من كرمك ان تفيدني بجواب اخر، اريد شرط يحدد فتح الصفقات كل 4 ساعات لو سمحت بانتظارك مع كل الشكر والتقدير
kira-h
20-09-2017, 07:48 AM
مساء الخير، استاذي العزيز لازلت بانتظار ان تتفضل علي بجوابك، و اريد من كرمك ان تفيدني بجواب اخر، اريد شرط يحدد فتح الصفقات كل 4 ساعات لو سمحت بانتظارك مع كل الشكر والتقدير
السؤال غير واضح
أما بالنسبة لفتح صفقة كل اربع ساعات يمكنك إما استخدام اغلاقات فريم الأربع ساعات أو استخدام الفرق بين توقيت فتح الصفقة السابقة ()OrderOpenTime مع وظيفة التوقيت الحالي ()TimeCurrent
Waddah
21-09-2017, 03:00 PM
السلام عليكم أستاذ
عند تفيذ أمر شراء مثلا في إكسبرت يعمل على مجموعة أزواج كيف نحدد ال point عند تحديد الستوب والتيك بروفيت SL TP
bool s=OrderSend(Symbols_Array[i],OP_BUY,Lots,MarketInfo(Symbols_Array[i],MODE_ASK),30,SL,TP,"Kira-h",MagicNumber,0,Blue);
kira-h
21-09-2017, 06:18 PM
السلام عليكم أستاذ
عند تفيذ أمر شراء مثلا في إكسبرت يعمل على مجموعة أزواج كيف نحدد ال point عند تحديد الستوب والتيك بروفيت SL TP
bool s=OrderSend(Symbols_Array[i],OP_BUY,Lots,MarketInfo(Symbols_Array[i],MODE_ASK),30,SL,TP,"Kira-h",MagicNumber,0,Blue);
وعليكم السلام
ستقوم بعمل دالة قيمة النقطة كالتالي :
double point;
void Points(string symbol)
{
if(MarketInfo(symbol,MODE_DIGITS)<4)point=0.01;else point=0.0001;
}
ثم الشروط كالتالي :
Points(Symbols_Array[i]);
bool s=OrderSend(Symbols_Array[i],OP_BUY,Lots,MarketInfo(Symbols_Array[i],MODE_ASK),30,SL,TP,"Kira-h",MagicNumber,0,Blue);
أبو عمر
23-09-2017, 10:32 PM
مثال
double dn1,up1,dn2,up2,dn3,up3;
if(Close[1]>Open[1])dn1=Open[1];up1=Close[1];
if(Close[1]<Open[1])dn1=Close[1];up1=Open[1];
if(Close[2]>Open[2])dn2=Open[2];up2=Close[2];
if(Close[2]<Open[2])dn2=Close[2];up2=Open[2];
if(Close[3]>Open[3])dn3=Open[3];up3=Close[3];
if(Close[3]<Open[3])dn3=Close[3];up3=Open[3];
if((dn1+dn2+dn3)>???)//--
if((up1+up2+up3)>???)//--
أخي حسن
هذا الكود الذي أرسلته لي صحيح في الظاهر وهو ما أريده تماماً
لكن مع الأسف لا تعمل الشروط التي فيها رموز القيم السفلية والعلوية
كمثال : حاول لو تكرمت تجرب شرط الشراء التالي
&& dn1-Low[1]>1000*Point
فإن الشرط لا يعمل (أقصد انه يفتح صفقة لكن لا يلتزم بالشرط ولا ادري على أي أساس يفتح)
ما هي المشكلة ؟
Waddah
24-09-2017, 11:28 AM
هل الدالة التالية صحيحة :
الهدف منها عدد الصفقات المفتوحة على زوج معين في إكسبرت يعمل على مصفوفة أزواج
حيث pairs[i] . هي المصفوفة (معرفة
int Orderscnt()// دالة حساب عدد الصفقات المفعلة
{
int cnt=0;
for(int j=0;i<OrdersTotal();j++)// البحث بالصفقات المفعلة
{
if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==pairs[i]&&MagicNo==OrderMagicNumber())
{
cnt++;
}
}
}
return(cnt);
}
kira-h
24-09-2017, 03:27 PM
هل الدالة التالية صحيحة :
الهدف منها عدد الصفقات المفتوحة على زوج معين في إكسبرت يعمل على مصفوفة أزواج
حيث pairs[i] . هي المصفوفة (معرفة
int Orderscnt()// دالة حساب عدد الصفقات المفعلة
{
int cnt=0;
for(int j=0;i<OrdersTotal();j++)// البحث بالصفقات المفعلة
{
if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==pairs[i]&&MagicNo==OrderMagicNumber())
{
cnt++;
}
}
}
return(cnt);
}
الصحيح كالتالي:
int Orderscnt(string symbol)// دالة حساب عدد الصفقات المفعلة
{
int cnt=0;
for(int j=0;i<OrdersTotal();j++)// البحث بالصفقات المفعلة
{
if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==symbol&&MagicNo==OrderMagicNumber())
{
cnt++;
}
}
}
return(cnt);
}
ثم عند الاستدعاء تقوم بالتالي:
Orderscnt(pairs[i]);
kira-h
24-09-2017, 03:32 PM
أخي حسن
هذا الكود الذي أرسلته لي صحيح في الظاهر وهو ما أريده تماماً
لكن مع الأسف لا تعمل الشروط التي فيها رموز القيم السفلية والعلوية
كمثال : حاول لو تكرمت تجرب شرط الشراء التالي
&& dn1-Low[1]>1000*Point
فإن الشرط لا يعمل (أقصد انه يفتح صفقة لكن لا يلتزم بالشرط ولا ادري على أي أساس يفتح)
ما هي المشكلة ؟
الشرط صحيح بحيث سيفتح الصفقة إذا كان الفرق بين سعر (الاغلاق أو الافتتاح dn1) وسعر اللو بآخر شمعة مغلقة أكبر قطعا من 100 نقطة (بالمنصة الخماسية) و 1000 نقطة بالمنصة الرباعية
Aminox
24-09-2017, 06:07 PM
مرحبا سيد kira قمت ببرمجة إكسبيرت يقوم بفتح buy عند تقاطع الموفينجات للأعلى
والعكس sell عند التقاطع للأسفل ... لكن أريد أن أضع مثلا عندما يقوم التقاطع للأعلى
والدخول buy يخرج من الصفقة عند تحقيق شرط sell وهكذا ... ما هو الكود المطلوب
في هذه الحالة شكرا لك :)
sabil
24-09-2017, 06:09 PM
عايز دالة الـ maxtrades بس بفلتر وقت
يعني مثلاً عايز اقول
الاكسبرت يفتح صفقات بيع او شراء من الساعة 10 صباحاً حتى الساعة 10 مساءاً فقط بتوقيت المنصة وبحد اقصى عدد صفقات معين للبيع او الشراء 2 او 3 او 4 ... الخ في الفترة دي بس .
وباقي الدوال تبقى شغالة عادي على مدار 24 ساعة
Aminox
25-09-2017, 09:59 AM
مرحبا سيد kira قمت ببرمجة إكسبيرت يقوم بفتح buy عند تقاطع الموفينجات للأعلى
والعكس sell عند التقاطع للأسفل ... لكن أريد أن أضع مثلا عندما يقوم التقاطع للأعلى
والدخول buy يخرج من الصفقة عند تحقيق شرط sell وهكذا ... ما هو الكود المطلوب
في هذه الحالة شكرا لك :)
هل ممكن المساعدة سيدي
kira-h
25-09-2017, 07:08 PM
مرحبا سيد kira قمت ببرمجة إكسبيرت يقوم بفتح buy عند تقاطع الموفينجات للأعلى
والعكس sell عند التقاطع للأسفل ... لكن أريد أن أضع مثلا عندما يقوم التقاطع للأعلى
والدخول buy يخرج من الصفقة عند تحقيق شرط sell وهكذا ... ما هو الكود المطلوب
في هذه الحالة شكرا لك :)
ارفق الكود لاضافة الاغلاق العكسي
kira-h
25-09-2017, 07:20 PM
عايز دالة الـ maxtrades بس بفلتر وقت
يعني مثلاً عايز اقول
الاكسبرت يفتح صفقات بيع او شراء من الساعة 10 صباحاً حتى الساعة 10 مساءاً فقط بتوقيت المنصة وبحد اقصى عدد صفقات معين للبيع او الشراء 2 او 3 او 4 ... الخ في الفترة دي بس .
وباقي الدوال تبقى شغالة عادي على مدار 24 ساعة
دالة حساب عدد الصفقات في مجال زمني كالتالي :
int Orderscntime(int type=-1)
{
int cnt=0;
datetime Start=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + "10:00"),
End=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + "22:00");
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&MagicNo==OrderMagicNumber()&&(OrderType()==type||type==-1))
{
if(OrderOpenTime()>=Start&&OrderOpenTime()<=End)
{
cnt++;
}
}
}
}
return(cnt);
}
kira-h
25-09-2017, 07:21 PM
عايز دالة الـ maxtrades بس بفلتر وقت
يعني مثلاً عايز اقول
الاكسبرت يفتح صفقات بيع او شراء من الساعة 10 صباحاً حتى الساعة 10 مساءاً فقط بتوقيت المنصة وبحد اقصى عدد صفقات معين للبيع او الشراء 2 او 3 او 4 ... الخ في الفترة دي بس .
وباقي الدوال تبقى شغالة عادي على مدار 24 ساعة
دالة حساب عدد الصفقات التي فتحت ضمن فترة زمنية محددة كالتالي :
int Orderscntime(int type=-1)
{
int cnt=0;
datetime Start=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + "10:00"),
End=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + "22:00");
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&MagicNo==OrderMagicNumber()&&(OrderType()==type||type==-1))
{
if(OrderOpenTime()>=Start&&OrderOpenTime()<=End)
{
cnt++;
}
}
}
}
return(cnt);
}
Aminox
25-09-2017, 08:00 PM
تفضل سيدي الكود في المرفقات لا يوجد أي أغلاط في الكود
فقط قمت بوضع علامات الإستفهام في المكان المخصص
للستوب والتيك ... شكرا لك كثيرا
sabil
25-09-2017, 08:15 PM
دالة حساب عدد الصفقات التي فتحت ضمن فترة زمنية محددة كالتالي :
int Orderscntime(int type=-1)
{
int cnt=0;
datetime Start=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + "10:00"),
End=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + "22:00");
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&MagicNo==OrderMagicNumber()&&(OrderType()==type||type==-1))
{
if(OrderOpenTime()>=Start&&OrderOpenTime()<=End)
{
cnt++;
}
}
}
}
return(cnt);
}
تمام واستدعيها مثلاً في شروط الدخول كالتالي ...
if(Orderscntime(op_buy)<3
دا معناها ان كل يوم من الساعة 10 صباحاً حتى 10 مساءاً هيفتح صفقتين شراء بناءاً على شروط الدخول
صح كده ؟
kira-h
25-09-2017, 10:22 PM
تمام واستدعيها مثلاً في شروط الدخول كالتالي ...
if(Orderscntime(op_buy)<3
دا معناها ان كل يوم من الساعة 10 صباحاً حتى 10 مساءاً هيفتح صفقتين شراء بناءاً على شروط الدخول
صح كده ؟
نعم صحيح أخي
kira-h
25-09-2017, 10:44 PM
تفضل سيدي الكود في المرفقات لا يوجد أي أغلاط في الكود
فقط قمت بوضع علامات الإستفهام في المكان المخصص
للستوب والتيك ... شكرا لك كثيرا
مرفق الاكسبيرت المعدل
sabil
25-09-2017, 11:47 PM
نعم صحيح أخي
طيب واستدعي التوقيت نفسه في متغير خارجي ازاي ؟
اكتب مثلا
input double start=10:00
وداخل الدالة نفسها اكتب مكان التوقيت start
وهكذا ..
ولا العمل ايه بالظبط ؟
kira-h
26-09-2017, 01:08 AM
طيب واستدعي التوقيت نفسه في متغير خارجي ازاي ؟
اكتب مثلا
input double start=10:00
وداخل الدالة نفسها اكتب مكان التوقيت start
وهكذا ..
ولا العمل ايه بالظبط ؟
ستستخدم مكانها متغرات خارجية
مثال :
input string Start_Time="08:00";
input string End_Time="23:00";
int Orderscntime(int type=-1)
{
int cnt=0;
datetime Start=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + Start_Time),
End=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + End_Time);
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&MagicNo==OrderMagicNumber()&&(OrderType()==type||type==-1))
{
if(OrderOpenTime()>=Start&&OrderOpenTime()<=End)
{
cnt++;
}
}
}
}
return(cnt);
}
Aminox
26-09-2017, 01:27 PM
مرفق الاكسبيرت المعدل
تحياتي لك أستاذ Kira-h شكرا لمجهودتك معنا ربنا يحفضك
مازال هناك مشكل صغير سيدي عند الدخول بيع و يتقاطع الموفينجات بالعكس يتم غلق صفقة البيع والدخول شراء
لـكـــن عند الدخول شراء ويتقاطع الموفينجات بالعكس لا يتم غلق الصفقة بل يتم زيادة صفقة بيع فقط
3293
3294
Aminox
26-09-2017, 02:14 PM
الإكسبيرت في المرفقات تحياتي أستاذ
Aminox
26-09-2017, 03:53 PM
لقد تم حل المشكل سيدي شكرا لك
جزاك الله خيرا
sabil
26-09-2017, 05:13 PM
ستستخدم مكانها متغرات خارجية
مثال :
input string Start_Time="08:00";
input string End_Time="23:00";
int Orderscntime(int type=-1)
{
int cnt=0;
datetime Start=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + Start_Time),
End=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + End_Time);
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&MagicNo==OrderMagicNumber()&&(OrderType()==type||type==-1))
{
if(OrderOpenTime()>=Start&&OrderOpenTime()<=End)
{
cnt++;
}
}
}
}
return(cnt);
}
شكرا اخي حسن جاري التجربة ...
samizhraldeen
26-09-2017, 06:22 PM
السلام عليكم اخي كيرا
اريد ان اقرا اكواد الدايفرجنس كيف تكتب
هل يمكنك ترك اكسبيرت مكتوب فيه الاكواد
مع الترلينغ ستوب والتيك بروفيت
لارى كيف يترابطوا الاكواد سويا
شاكر لك افضالك
kira-h
26-09-2017, 06:29 PM
لقد تم حل المشكل سيدي شكرا لك
جزاك الله خيرا
بالتوفيق إن شاء الله
kira-h
26-09-2017, 06:30 PM
شكرا اخي حسن جاري التجربة ...
بالتوفيق إن شاء الله
kira-h
26-09-2017, 06:35 PM
السلام عليكم اخي كيرا
اريد ان اقرا اكواد الدايفرجنس كيف تكتب
هل يمكنك ترك اكسبيرت مكتوب فيه الاكواد
مع الترلينغ ستوب والتيك بروفيت
لارى كيف يترابطوا الاكواد سويا
شاكر لك افضالك
وعليكم السلام
يتم أولا برمجة الدايفرجنس بمؤشر منفصل (فالمؤشرات تحليلية)
وعليه تضع الشروط بالاكسبيرت بناءا على اشارات المؤشر
مثال لمؤشر دايرفجنس الـ rsi والاكسبيرت بالمرفقات
samizhraldeen
26-09-2017, 07:36 PM
وفقك الله هل يمكنك الشرح لي اين
هم القاع وقاع اقل والقاع والقاع الاكبر شراء
والقمة والقمة الاكبير والقمة والقمة الاصغر بيع
kira-h
26-09-2017, 10:02 PM
وفقك الله هل يمكنك الشرح لي اين
هم القاع وقاع اقل والقاع والقاع الاكبر شراء
والقمة والقمة الاكبير والقمة والقمة الاصغر بيع
المطلوب غير واضح، اشرح بتفصيل أكثر
samizhraldeen
27-09-2017, 11:10 AM
اقصد اين طلبت من الاكسبيرت ان فتح صفقة عند فتح دايفرجنس شرائي
ودايفرجنس بيعي
kira-h
27-09-2017, 06:20 PM
اقصد اين طلبت من الاكسبيرت ان فتح صفقة عند فتح دايفرجنس شرائي
ودايفرجنس بيعي
شرط الشراء :
if(dv(0,1)!=EMPTY_VALUE)
شرط البيع :
if(dv(1,1)!=EMPTY_VALUE)
Aminox
28-09-2017, 12:35 AM
مرحبا أستاذ أعتذر عن كثرة الأسئلة
عندما يلتقيا خطوط الموفينج للأعلى أو للأسفل
مثلا عند الإلتقاء للأسفل يتم الدخول صفقة sell
لكن المشكلة أنه يقوم بالدخول sell sell sell sell
قمت بكتابة كود OrdersTotal==0
تم حل المشكل لكن ولد مشكل أخر وهو عندما لا يتم
تحقيق الهدف و تنعكس الصفقة لا يتم الدخول في صفقات
جديد .... إذن المطلوب سيدي أن يقوم الإكسبيرت عند التقاطع
يفتح صفقة واحدة فقط وعند إنعكاس الصفقة و خلق فرص أخرى
للدخول يتم الدخول عليها رغم أن هناك صفقة لازالت مفتوحة
صورة لزيادة الفهم الإكسبرت في المرفقات تحياتي أستاذ
3321
Aminox
28-09-2017, 04:11 PM
مرحبا أستاذ أعتذر عن كثرة الأسئلة
عندما يلتقيا خطوط الموفينج للأعلى أو للأسفل
مثلا عند الإلتقاء للأسفل يتم الدخول صفقة sell
لكن المشكلة أنه يقوم بالدخول sell sell sell sell
قمت بكتابة كود OrdersTotal==0
تم حل المشكل لكن ولد مشكل أخر وهو عندما لا يتم
تحقيق الهدف و تنعكس الصفقة لا يتم الدخول في صفقات
جديد .... إذن المطلوب سيدي أن يقوم الإكسبيرت عند التقاطع
يفتح صفقة واحدة فقط وعند إنعكاس الصفقة و خلق فرص أخرى
للدخول يتم الدخول عليها رغم أن هناك صفقة لازالت مفتوحة
صورة لزيادة الفهم الإكسبرت في المرفقات تحياتي أستاذ
3321
هل من مساعدة سيد kira-h
kira-h
28-09-2017, 07:00 PM
مرحبا أستاذ أعتذر عن كثرة الأسئلة
عندما يلتقيا خطوط الموفينج للأعلى أو للأسفل
مثلا عند الإلتقاء للأسفل يتم الدخول صفقة sell
لكن المشكلة أنه يقوم بالدخول sell sell sell sell
قمت بكتابة كود OrdersTotal==0
تم حل المشكل لكن ولد مشكل أخر وهو عندما لا يتم
تحقيق الهدف و تنعكس الصفقة لا يتم الدخول في صفقات
جديد .... إذن المطلوب سيدي أن يقوم الإكسبيرت عند التقاطع
يفتح صفقة واحدة فقط وعند إنعكاس الصفقة و خلق فرص أخرى
للدخول يتم الدخول عليها رغم أن هناك صفقة لازالت مفتوحة
صورة لزيادة الفهم الإكسبرت في المرفقات تحياتي أستاذ
3321
مرحبا أخي
ستقوم بإضافة شرط زمني حتى لا يتكرر دخول الصفقة بنفس الشمعة
تم التعديل بالنسخة المرفقة
صياد الجراح
28-09-2017, 11:48 PM
بسم الله الرحمن الرحيم
استاذ حسن تحية من القلب ..
وانا بتمرن و شغال على مؤشرات البارات قبلنى مشكلة بسيطة ..
عملت مؤشر اسهم بناءا على مؤشر الفوليوم (مرفق ) وكانت شروط ظهور السهم كالتالى :-
1- شمعة صاعده او هابطه ( النقطة دى تمام )
2- بار مؤشر الفوليوم اكبر من الخط المنقط ( النقطة دى تمام )
3- البار السابق اكبر من البار قبل السابق ( هنا المشكلة ) معرفتش اكتب الجملة الشرطية بتاعتها ..
3336
الكود ( المرفق ) بينفذ اول شرطين من شروط ظهور السهم
المطلوب اضافة الشرط الثالث فقط الى الكود مع
وهو ان يكون بار مؤشر الفوليوم الشمعة 1 اكبر من بار مؤشر الفوليوم لشمعة 2
الالوان اللى حنشتغل عليها فى مؤشر الفوليوم 4 الوان فقط (gray-teal-green- lime) ونتجاهل باقى الالوان
.
.
لك ودى وتقديرى
kira-h
29-09-2017, 01:29 AM
بسم الله الرحمن الرحيم
استاذ حسن تحية من القلب ..
وانا بتمرن و شغال على مؤشرات البارات قبلنى مشكلة بسيطة ..
عملت مؤشر اسهم بناءا على مؤشر الفوليوم (مرفق ) وكانت شروط ظهور السهم كالتالى :-
1- شمعة صاعده او هابطه ( النقطة دى تمام )
2- بار مؤشر الفوليوم اكبر من الخط المنقط ( النقطة دى تمام )
3- البار السابق اكبر من البار قبل السابق ( هنا المشكلة ) معرفتش اكتب الجملة الشرطية بتاعتها ..
3336
الكود ( المرفق ) بينفذ اول شرطين من شروط ظهور السهم
المطلوب اضافة الشرط الثالث فقط الى الكود مع
وهو ان يكون بار مؤشر الفوليوم الشمعة 1 اكبر من بار مؤشر الفوليوم لشمعة 2
الالوان اللى حنشتغل عليها فى مؤشر الفوليوم 4 الوان فقط (gray-teal-green- lime) ونتجاهل باقى الالوان
.
.
لك ودى وتقديرى
ستقوم بتعريفها قيم الألوان واحدة تلوى الاخرى بالشمعة 2 ثم بالشمعة 3 وتقارنها
مثال :
double p0=iCustom(Symbol(),0,"iPolo - HLVB v1.0",0,2);//قيمة البار ذو اللون 0 بالشمعة السابقة
double p1=iCustom(Symbol(),0,"iPolo - HLVB v1.0",1,3);//قيمة البار ذو اللون 1 بالشمعة قبل السابقة
if(p0>p1)//شرط بار 0 أكبر من بار 1
صياد الجراح
29-09-2017, 05:02 AM
ستقوم بتعريفها قيم الألوان واحدة تلوى الاخرى بالشمعة 2 ثم بالشمعة 3 وتقارنها
مثال :
double p0=icustom(symbol(),0,"ipolo - hlvb v1.0",0,2);//قيمة البار ذو اللون 0 بالشمعة السابقة
double p1=icustom(symbol(),0,"ipolo - hlvb v1.0",1,3);//قيمة البار ذو اللون 1 بالشمعة قبل السابقة
if(p0>p1)//شرط بار 0 أكبر من بار 1
بارك الله فيك اخى حسن ..
انا فاهم الجزئية دى على اساس ان المؤشر لونين فقط
انما المشكلة عندى فى كتابة شرط if لاربع الالوان
قمت باستدعاء المؤشر ل 4 الوان لشمعة 1 - و7 الوان لشمعة 2
double A1=iCustom(Symbol(),0,"iPolo - HLVB v1.0",0,i);//Gray
double A5=iCustom(Symbol(),0,"iPolo - HLVB v1.0",4,i);//Teal
double A6=iCustom(Symbol(),0,"iPolo - HLVB v1.0",5,i);//Green
double A7=iCustom(Symbol(),0,"iPolo - HLVB v1.0",6,i);//Lime
double B1=iCustom(Symbol(),0,"iPolo - HLVB v1.0",7,i);// الخط
double C1=iCustom(Symbol(),0,"iPolo - HLVB v1.0",0,i+1);//Gray
double C2=iCustom(Symbol(),0,"iPolo - HLVB v1.0",1,i+1);
double C3=iCustom(Symbol(),0,"iPolo - HLVB v1.0",2,i+1);
double C4=iCustom(Symbol(),0,"iPolo - HLVB v1.0",3,i+1);
double C5=iCustom(Symbol(),0,"iPolo - HLVB v1.0",4,i+1);//Teal
double C6=iCustom(Symbol(),0,"iPolo - HLVB v1.0",5,i+1);//Green
double C7=iCustom(Symbol(),0,"iPolo - HLVB v1.0",6,i+1);//Lime
double B1=iCustom(Symbol(),0,"iPolo - HLVB v1.0",7,i+1);// الخط
بعد اذنك تكملة الكود وكتابة دالة IF
انا حاولت اعملها بس ماظبطت ازاى اربط بين الشروط ليكون
if(A1>C1||C2||C3||C4||C5||C6||C7)
او
if(A5>C1||C2||C3||C4||C5||C6||C7)
او
if(A6>C1||C2||C3||C4||C5||C6||C7)
او
if(A7>C1||C2||C3||C4||C5||C6||C7)
و
(open1<close1&&(A5>B1||A6>B1||A7>B1||A1>B1))
(open1>close1&&(A5>B1||A6>B1||A7>B1||A1>B1))
.
.
لك ودى وتقديرى
Aminox
29-09-2017, 06:01 PM
مرحبا أخي
ستقوم بإضافة شرط زمني حتى لا يتكرر دخول الصفقة بنفس الشمعة
تم التعديل بالنسخة المرفقة
شكرا كثيرا أخي حسن
أتمنى لك خيرا من عند الله يا أخي
شكرا لك مرة أخرى
kira-h
29-09-2017, 06:17 PM
بارك الله فيك اخى حسن ..
انا فاهم الجزئية دى على اساس ان المؤشر لونين فقط
انما المشكلة عندى فى كتابة شرط if لاربع الالوان
قمت باستدعاء المؤشر ل 4 الوان لشمعة 1 - و7 الوان لشمعة 2
double A1=iCustom(Symbol(),0,"iPolo - HLVB v1.0",0,i);//Gray
double A5=iCustom(Symbol(),0,"iPolo - HLVB v1.0",4,i);//Teal
double A6=iCustom(Symbol(),0,"iPolo - HLVB v1.0",5,i);//Green
double A7=iCustom(Symbol(),0,"iPolo - HLVB v1.0",6,i);//Lime
double B1=iCustom(Symbol(),0,"iPolo - HLVB v1.0",7,i);// الخط
double C1=iCustom(Symbol(),0,"iPolo - HLVB v1.0",0,i+1);//Gray
double C2=iCustom(Symbol(),0,"iPolo - HLVB v1.0",1,i+1);
double C3=iCustom(Symbol(),0,"iPolo - HLVB v1.0",2,i+1);
double C4=iCustom(Symbol(),0,"iPolo - HLVB v1.0",3,i+1);
double C5=iCustom(Symbol(),0,"iPolo - HLVB v1.0",4,i+1);//Teal
double C6=iCustom(Symbol(),0,"iPolo - HLVB v1.0",5,i+1);//Green
double C7=iCustom(Symbol(),0,"iPolo - HLVB v1.0",6,i+1);//Lime
double B1=iCustom(Symbol(),0,"iPolo - HLVB v1.0",7,i+1);// الخط
بعد اذنك تكملة الكود وكتابة دالة IF
انا حاولت اعملها بس ماظبطت ازاى اربط بين الشروط ليكون
if(A1>C1||C2||C3||C4||C5||C6||C7)
او
if(A5>C1||C2||C3||C4||C5||C6||C7)
او
if(A6>C1||C2||C3||C4||C5||C6||C7)
او
if(A7>C1||C2||C3||C4||C5||C6||C7)
و
(open1<close1&&(A5>B1||A6>B1||A7>B1||A1>B1))
(open1>close1&&(A5>B1||A6>B1||A7>B1||A1>B1))
.
.
لك ودى وتقديرى
الصحيح كالتالي
if(A5>C1||A5>C2||A5>C3||A5>C4||A5>C5||A5>C6||A5>C7)
ويمكنك الان تصحيح بقية الشروط
صياد الجراح
29-09-2017, 08:31 PM
الصحيح كالتالي
if(A5>C1||A5>C2||A5>C3||A5>C4||A5>C5||A5>C6||A5>C7)
ويمكنك الان تصحيح بقية الشروط
بارك الله فيك اخى حسن
قمت بكتابة الكود بهذا الشكل
if(A1>C1||A1>C2||A1>C3||A1>C4||A1>C5||A1>C6||A1>C7)
||
if(A5>C1||A5>C2||A5>C3||A5>C4||A5>C5||A5>C6||A5>C7)
||
if(A6>C1||A6>C2||A6>C3||A6>C4||A6>C5||A6>C6||A6>C7)
||
if(A7>C1||A7>C2||A7>C3||A7>C4||A7>C5||A7>C6||A7>C7)
&&
if(open1<close1&&(A5>B1||A6>B1||A7>B1||A1>B1)){nam_B="BUY";}else{nam_B="no";}
if(open1>close1&&(A5>B1||A6>B1||A7>B1||A1>B1)){nam_S="SELL";}else{nam_S="no";}
واعطى هذه اخطاء
3353
الرجاء التصحيح
لك ودى وتقديرى
kira-h
30-09-2017, 03:33 AM
بارك الله فيك اخى حسن
قمت بكتابة الكود بهذا الشكل
if(A1>C1||A1>C2||A1>C3||A1>C4||A1>C5||A1>C6||A1>C7)
||
if(A5>C1||A5>C2||A5>C3||A5>C4||A5>C5||A5>C6||A5>C7)
||
if(A6>C1||A6>C2||A6>C3||A6>C4||A6>C5||A6>C6||A6>C7)
||
if(A7>C1||A7>C2||A7>C3||A7>C4||A7>C5||A7>C6||A7>C7)
&&
if(open1<close1&&(A5>B1||A6>B1||A7>B1||A1>B1)){nam_B="BUY";}else{nam_B="no";}
if(open1>close1&&(A5>B1||A6>B1||A7>B1||A1>B1)){nam_S="SELL";}else{nam_S="no";}
واعطى هذه اخطاء
3353
الرجاء التصحيح
لك ودى وتقديرى
وعليكم السلام
انتبه للأقواس ولا تدمج الجمل الشرطية if ببعضها، لهذا نصحتك بدراسة قواعد اللغة قبل التطبيق
عموما الصحيح كالتالي :
if(((A1>C1||A1>C2||A1>C3||A1>C4||A1>C5||A1>C6||A1>C7)
||(A5>C1||A5>C2||A5>C3||A5>C4||A5>C5||A5>C6||A5>C7)
||(A6>C1||A6>C2||A6>C3||A6>C4||A6>C5||A6>C6||A6>C7)
||(A7>C1||A7>C2||A7>C3||A7>C4||A7>C5||A7>C6||A7>C7))
&&(open1<close1&&(A5>B1||A6>B1||A7>B1||A1>B1))){nam_B="BUY";}else{nam_B="no";}
ويمكنك كذلك كتابتها بهذه الطريقة ولا يوجد اختلاف في النتيجة
if((A1>C1||A1>C2||A1>C3||A1>C4||A1>C5||A1>C6||A1>C7)||(A5>C1||A5>C2||A5>C3||A5>C4||A5>C5||A5>C6||A5>C7)
||(A6>C1||A6>C2||A6>C3||A6>C4||A6>C5||A6>C6||A6>C7)||(A7>C1||A7>C2||A7>C3||A7>C4||A7>C5||A7>C6||A7>C7))
{
if(open1<close1&&(A5>B1||A6>B1||A7>B1||A1>B1))
{
nam_B="BUY";
}
}
else{nam_B="no";}
لكن الأفضل الطريقة الأولى لأنه يوجد الشرط العكسي else لابد أن يعكس واحدا من كل تلك الشروط وليس كما بالطريقة التانية حيث else ترتبط بأول الشروط if فقط ولا يهتم إذا عكس أحد شروط if االثانية
بنفس الطريقة يمكنك كتابة شروط البيع
صياد الجراح
30-09-2017, 07:49 PM
وعليكم السلام
انتبه للأقواس ولا تدمج الجمل الشرطية if ببعضها، لهذا نصحتك بدراسة قواعد اللغة قبل التطبيق
عموما الصحيح كالتالي :
if(((A1>C1||A1>C2||A1>C3||A1>C4||A1>C5||A1>C6||A1>C7)
||(A5>C1||A5>C2||A5>C3||A5>C4||A5>C5||A5>C6||A5>C7)
||(A6>C1||A6>C2||A6>C3||A6>C4||A6>C5||A6>C6||A6>C7)
||(A7>C1||A7>C2||A7>C3||A7>C4||A7>C5||A7>C6||A7>C7))
&&(open1<close1&&(A5>B1||A6>B1||A7>B1||A1>B1))){nam_B="BUY";}else{nam_B="no";}
ويمكنك كذلك كتابتها بهذه الطريقة ولا يوجد اختلاف في النتيجة
if((A1>C1||A1>C2||A1>C3||A1>C4||A1>C5||A1>C6||A1>C7)||(A5>C1||A5>C2||A5>C3||A5>C4||A5>C5||A5>C6||A5>C7)
||(A6>C1||A6>C2||A6>C3||A6>C4||A6>C5||A6>C6||A6>C7)||(A7>C1||A7>C2||A7>C3||A7>C4||A7>C5||A7>C6||A7>C7))
{
if(open1<close1&&(A5>B1||A6>B1||A7>B1||A1>B1))
{
nam_B="BUY";
}
}
else{nam_B="no";}
لكن الأفضل الطريقة الأولى لأنه يوجد الشرط العكسي else لابد أن يعكس واحدا من كل تلك الشروط وليس كما بالطريقة التانية حيث else ترتبط بأول الشروط if فقط ولا يهتم إذا عكس أحد شروط if االثانية
بنفس الطريقة يمكنك كتابة شروط البيع
بسم الله الرحمن الرحيم
بارك الله فيك اخى حسن .. الف شكر على مجهودك ووقتك
* ايه هو افضل مصدر لتعليم اساسيات اللغه ..؟
بالنسبة للكود هو برمجيا اصبح بلا اخطاء .. ولكن لا ينفذ الشرط المطلوب ..(ان يكون البار اكبر من البار السابق )
صورة توصيحية
الخطوط بتوضح اسهم غير صحيحه (لان البار اصغر من البار السابق )
3368
.
.
لك ودى وتقديرى لشخصك الكريم
Ahmed
30-09-2017, 10:19 PM
السلام عليكم استاذ حسن
اريد وظيفة الربح بالدولار بدلالة الزوج ونوع الصفقة
جزاك الله خيرا
Ahmed
01-10-2017, 03:14 PM
وكذلك اريد وظيفة تعود بعدد الازواج التي بها صفقات مفتوحة
بارك الله فيك وجزاك الله خيرا
kira-h
01-10-2017, 08:24 PM
السلام عليكم استاذ حسن
اريد وظيفة الربح بالدولار بدلالة الزوج ونوع الصفقة
جزاك الله خيرا
وعليكم السلام
كالتالي :
double Profit_By_USD(string symbol,int type)
{
double pts;
for(int i=0;i<OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ot=OrderType();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
if(sy==symbol&&ot==type)
{
pts+=pt+sw+cm;
}
}
return(pts);
}
وكذلك اريد وظيفة تعود بعدد الازواج التي بها صفقات مفتوحة
بارك الله فيك وجزاك الله خيرا
int TotalOrders(string symbol,int type=-1)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==symbol&&(OrderType()==type||type==-1))
{
cnt++;
}
}
}
return(cnt);
}
Ahmed
01-10-2017, 11:18 PM
بارك الله فيك
وجزاك الله خيرا
kira-h
02-10-2017, 05:42 PM
بارك الله فيك
وجزاك الله خيرا
وإياك أخي الكريم
والله الموفق
sal_moh85
03-10-2017, 11:54 AM
سلام عليكم حسن
سوال هل يوجد دالة اخفاء ترينغ ستوب لكي يكون اسرع في انتقل
وشكرا
sal_moh85
03-10-2017, 01:58 PM
سلام عليكم استاذ حسن كمان سوال تاني بي نسبه لي كود ادارة راس المال التناسبيه
يلي حضرتك منزله في منتدى
عم واجه مشكله انو انا حطية راس مال 1000 دولار لازم يفتح العقد بي ريسك 10% يعني لازم يفتح لوت العقد بي 0.10 اول خطوه تمام بس باقي الخطوات يعني اذا صار راس المال 1200 دولا بيتم عم يفتح قيمة العقد 0.10 لازم يفتح 0.12 هون المشكله شلون بدي حلها وشكرا
Ahmed
03-10-2017, 02:07 PM
3409
السلام عليكم استاذ حسن
في الصورة المرفقة يوجد ثلاثة ازواج ويوجد صفقات مفتوحة بكل زوج
اريد وظيفة تعود بعدد الازواج التي بها صفقات مفتوحة
لا يهمني عدد الصفقات او نوعها
وفي الصورة المرفقة ستعود الدالة بالرقم 3 لانه توجد صفقات على ثلاثة ازواج
بارك الله فيك
Aminox
03-10-2017, 06:01 PM
مرحبا أخي حسن
ما هي الدالة التي أستخدم عندما أريد
إستدعاء مؤشر خارجي كمثال إسم المؤشر
Ex_50_Y.ex4
جزاك الله خيرا
kira-h
03-10-2017, 07:26 PM
سلام عليكم حسن
سوال هل يوجد دالة اخفاء ترينغ ستوب لكي يكون اسرع في انتقل
وشكرا
وعليكم السلام
دالة التريلينغ المخفي كالتالي:
void HidenMoveTrailingStop()
{
bool s;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
if(sy==Symbol()&&mn==MagicNo&&ot<=OP_SELL)
{
if(ot==OP_BUY)
{
if(NormalizeDouble(Ask-(HidenTrailingStep*point),Digits)>NormalizeDouble((op+(HidenTrailingStop*point)),Dig its))
{
if((NormalizeDouble(sl,Digits)<NormalizeDouble(Bid-(HidenTrailingStop*point),Digits))||(sl==0))
{
GlobalVariableSet("TS"+OrderTicket(),Bid-HidenTrailingStop*point);
}
}
}
else
{
if(NormalizeDouble(Bid+(HidenTrailingStep*point),D igits)<NormalizeDouble((op-(HidenTrailingStop*point)),Digits))
{
if((NormalizeDouble(sl,Digits)>(NormalizeDouble(Ask+(HidenTrailingStop*point),Dig its)))||(sl==0))
{
GlobalVariableSet("TS"+OrderTicket(),Ask+HidenTrailingStop*point);
}
}
}
}
}
}
ودالة الاغلاق كالتالي :
void CloseHidenTrailingStop()
{
bool close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==OP_BUY&&GlobalVariableGet("TS"+OrderTicket())!=0)
{
if(Bid<=GlobalVariableGet("TS"+OrderTicket()))
{
close=OrderClose(OrderTicket(),OrderLots(),Bid,3*Q );
GlobalVariableDel("TS"+OrderTicket());
}
}
if(OrderType()==OP_SELL&&GlobalVariableGet("TS"+OrderTicket())!=0)
{
if(Ask>=GlobalVariableGet("TS"+OrderTicket()))
{
close=OrderClose(OrderTicket(),OrderLots(),Ask,3*Q );
GlobalVariableDel("TS"+OrderTicket());
}
}
}
}
}
بحيث الشروط ببداية الدالة الرئيسية OnTick كالتالي:
if(HidenTrailingStop>0){HidenMoveTrailingStop();CloseHidenTrailingStop( );}
والمتغيرات الخارجية كالتالي :
input double HidenTrailingStop=0,
HidenTrailingStep=0;
kira-h
03-10-2017, 07:34 PM
سلام عليكم استاذ حسن كمان سوال تاني بي نسبه لي كود ادارة راس المال التناسبيه
يلي حضرتك منزله في منتدى
عم واجه مشكله انو انا حطية راس مال 1000 دولار لازم يفتح العقد بي ريسك 10% يعني لازم يفتح لوت العقد بي 0.10 اول خطوه تمام بس باقي الخطوات يعني اذا صار راس المال 1200 دولا بيتم عم يفتح قيمة العقد 0.10 لازم يفتح 0.12 هون المشكله شلون بدي حلها وشكرا
وعليم السلام
إذا تريد زيادة حجم العقد كل تدبيلة لرأس المال مثلا ستستخدم الوظيفة MathFloor بدل من MathCeil
kira-h
03-10-2017, 08:59 PM
مرحبا أخي حسن
ما هي الدالة التي أستخدم عندما أريد
إستدعاء مؤشر خارجي كمثال إسم المؤشر
Ex_50_Y.ex4
جزاك الله خيرا
ستقوم باستخدام الوظيفة iCustum
مثال :
double Ex(int index,int shift)
{
return(iCustom(Symbol(),0,"Ex_50_Y",index,shift));
}
بحيث index أندكس المؤشر بمعني رقم اشارة المؤشر، وستجد الأرقام مرتبة بإعدادات ألوان المؤشر
shift قيمة الاشارة عند شمعة معينة، مثلا 1 أي قيمة الاشارة عند إغلاق الشمعة 1
kira-h
03-10-2017, 09:28 PM
3409
السلام عليكم استاذ حسن
في الصورة المرفقة يوجد ثلاثة ازواج ويوجد صفقات مفتوحة بكل زوج
اريد وظيفة تعود بعدد الازواج التي بها صفقات مفتوحة
لا يهمني عدد الصفقات او نوعها
وفي الصورة المرفقة ستعود الدالة بالرقم 3 لانه توجد صفقات على ثلاثة ازواج
بارك الله فيك
وعليكم السلام
يمكنك عمل دالة بدالة اسم الزوج تعود برقم 1 إذا يوجد صفقة مفتوحة، و 0 إذا العكس
كالتالي:
int Orders(string symbol)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==symbol)
{
if(OrderOpenPrice()>0)return(1);
if(OrderOpenPrice()<=0)return(0);
}
}
}
return(0);
}
ثم تضع الاجمالي Trades حسب الأزواج التي تريدها
مثال :
int Trades=Orders("EURUSD")+Orders("GBPUSD")+Orders("NZDUSD")+Orders("AUDUSD")+Orders("USDCHF")+Orders("USDCAD");
sal_moh85
03-10-2017, 11:15 PM
شكرا جزيلا اخ حسن
Ahmed
03-10-2017, 11:16 PM
وعليكم السلام
يمكنك عمل دالة بدالة اسم الزوج تعود برقم 1 إذا يوجد صفقة مفتوحة، و 0 إذا العكس
كالتالي:
int Orders(string symbol)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==symbol)
{
if(OrderOpenPrice()>0)return(1);
if(OrderOpenPrice()<=0)return(0);
}
}
}
return(0);
}
ثم تضع الاجمالي Trades حسب الأزواج التي تريدها
مثال :
int Trades=Orders("EURUSD")+Orders("GBPUSD")+Orders("NZDUSD")+Orders("AUDUSD")+Orders("USDCHF")+Orders("USDCAD");
بارك الله فيك استاذ حسن
sal_moh85
03-10-2017, 11:25 PM
مشكور جدا على ردك اخ حسن بس بي نسبه لي سواي الثاني تبع ادارة راس المال جربة MathFloor و MathCeil
وما زبطة بس لما عم يصير الحساب على 1500 دولار يصير لوت 0.20 هو لازم يكون 0.15 وعلى 1600 دولار 0.16 وعلى هاد الرتم يعني كل زياده بي راس المال لازم يتناسب معها وشكرا
nuage
04-10-2017, 12:35 AM
السلام عليكم
اعتدنا على افضالك استاذي العزيز، لو سمحت احتاج دالة لتعديل الاهداف و الاستوبات لجميع الصفقات التي يفتحها الاكسبيرت ، مثلا فتحت الصفقة الاولى 100 هدف و 100 ستوب
بعدها تم فتح صفقة ثانية و ثالثة و عاشرة المطلوب ان يكون (مجموع) اهداف الصفقات المفتوحة جميعها بقيمة الهدف المذكور اولا الذي هو 100 و ستوب 100، بمعنى عندما تفتح الصفقة الثانية يصبح هدف كل من الصفقتين 50 و ستوبها 50، بنفس الفكرة عند فتح الصفقة العاشرة يصبح هدف كل من الصفقات 10 و ستوبها 10 اي مجموع اهداف الصفقات قيمة ثابتة تساوي الهدف و ستوب الصفقة الاولى 100 ارجو ان يكون الشرح واضحاً
Aminox
04-10-2017, 01:05 AM
ستقوم باستخدام الوظيفة iCustum
مثال :
double Ex(int index,int shift)
{
return(iCustom(Symbol(),0,"Ex_50_Y",index,shift));
}
بحيث index أندكس المؤشر بمعني رقم اشارة المؤشر، وستجد الأرقام مرتبة بإعدادات ألوان المؤشر
shift قيمة الاشارة عند شمعة معينة، مثلا 1 أي قيمة الاشارة عند إغلاق الشمعة 1
جزاك الله خيرا أخي حسن
Aminox
04-10-2017, 02:58 AM
أخي حسن
لقد قمت بعمل الكود الخاص بالنداء على مؤشر خارجي
لكن يوجد خطئ في الإكسبيرت لايعمل .... فكرة الإكسبيرت
عند تغيير المؤشر من لون إلى لون أخر يقوم بفتح صفقة
وعند الإشارة المعاكسة يقوم بقفل الصفقة الأولى والدخول
صفقة جديدة تفضل أخي كل شيئ على ما يرام لكن أضن
أن هنالك مشكل في تعريف المؤشر شكرا لك الصورة لتوضيح الخطأ
والإكسبيرت في المرفقات وأيضا المؤشر في المرفقات تحياتي
3427
Waddah
04-10-2017, 12:14 PM
السلام عليكم .... كيف أحدد الهاي و اللو لأول شمعة 4 ساعات في الأسبوع ؟
kira-h
04-10-2017, 06:21 PM
أخي حسن
لقد قمت بعمل الكود الخاص بالنداء على مؤشر خارجي
لكن يوجد خطئ في الإكسبيرت لايعمل .... فكرة الإكسبيرت
عند تغيير المؤشر من لون إلى لون أخر يقوم بفتح صفقة
وعند الإشارة المعاكسة يقوم بقفل الصفقة الأولى والدخول
صفقة جديدة تفضل أخي كل شيئ على ما يرام لكن أضن
أن هنالك مشكل في تعريف المؤشر شكرا لك الصورة لتوضيح الخطأ
والإكسبيرت في المرفقات وأيضا المؤشر في المرفقات تحياتي
تم التصحيح بالنسخة المرفقة
أبو عمر
05-10-2017, 07:58 AM
السلام عليكم ورحمة الله
أخي الغالي م حسن
هذا الكود الذي أرسلته أو التعريفات الحقيقة أنها لا تعمل
double dn1,up1,dn2,up2,dn3,up3;
if(Close[1]>Open[1])dn1=Open[1];up1=Close[1];
if(Close[1]<Open[1])dn1=Close[1];up1=Open[1];
if(Close[2]>Open[2])dn2=Open[2];up2=Close[2];
if(Close[2]<Open[2])dn2=Close[2];up2=Open[2];
if(Close[3]>Open[3])dn3=Open[3];up3=Close[3];
if(Close[3]<Open[3])dn3=Close[3];up3=Open[3];
أرجو منك تجريب الشرط التالي في الشراء مثلاً
dn1-Low[1]+High[1]-up1>500*Point
فسترى أنه يفتح صفقات مع أو بدون تحقق الشرط أعلاه يعني أنه ممكن يفتح صفقات مع عدم تحقق الشرط أعلاه
وأنا متأكد مما أقول
أرجو المساعدة
sal_moh85
05-10-2017, 12:53 PM
وعليكم السلام
دالة التريلينغ المخفي كالتالي:
void HidenMoveTrailingStop()
{
bool s;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
if(sy==Symbol()&&mn==MagicNo&&ot<=OP_SELL)
{
if(ot==OP_BUY)
{
if(NormalizeDouble(Ask-(HidenTrailingStep*point),Digits)>NormalizeDouble((op+(HidenTrailingStop*point)),Dig its))
{
if((NormalizeDouble(sl,Digits)<NormalizeDouble(Bid-(HidenTrailingStop*point),Digits))||(sl==0))
{
GlobalVariableSet("TS"+OrderTicket(),Bid-HidenTrailingStop*point);
}
}
}
else
{
if(NormalizeDouble(Bid+(HidenTrailingStep*point),D igits)<NormalizeDouble((op-(HidenTrailingStop*point)),Digits))
{
if((NormalizeDouble(sl,Digits)>(NormalizeDouble(Ask+(HidenTrailingStop*point),Dig its)))||(sl==0))
{
GlobalVariableSet("TS"+OrderTicket(),Ask+HidenTrailingStop*point);
}
}
}
}
}
}
ودالة الاغلاق كالتالي :
void CloseHidenTrailingStop()
{
bool close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==OP_BUY&&GlobalVariableGet("TS"+OrderTicket())!=0)
{
if(Bid<=GlobalVariableGet("TS"+OrderTicket()))
{
close=OrderClose(OrderTicket(),OrderLots(),Bid,3*Q );
GlobalVariableDel("TS"+OrderTicket());
}
}
if(OrderType()==OP_SELL&&GlobalVariableGet("TS"+OrderTicket())!=0)
{
if(Ask>=GlobalVariableGet("TS"+OrderTicket()))
{
close=OrderClose(OrderTicket(),OrderLots(),Ask,3*Q );
GlobalVariableDel("TS"+OrderTicket());
}
}
}
}
}
بحيث الشروط ببداية الدالة الرئيسية OnTick كالتالي:
if(HidenTrailingStop>0){HidenMoveTrailingStop();CloseHidenTrailingStop( );}
والمتغيرات الخارجية كالتالي :
input double HidenTrailingStop=0,
HidenTrailingStep=0;
سلام عليكم اخ حسن يعطيك العافيه يارب كود ممتاز جدا
بس سوال اذا انا حابب شوف هاد ترينيغ شلون بدي ارسم خط الوه انا شوفه بس طبعا مش بروكر
وشكرا
samizhraldeen
05-10-2017, 02:53 PM
السلام عليكم لماذا هنالك خطا في الكود رغم اني كتبته كما في الشرح
kira-h
05-10-2017, 06:11 PM
مشكور جدا على ردك اخ حسن بس بي نسبه لي سواي الثاني تبع ادارة راس المال جربة MathFloor و MathCeil
وما زبطة بس لما عم يصير الحساب على 1500 دولار يصير لوت 0.20 هو لازم يكون 0.15 وعلى 1600 دولار 0.16 وعلى هاد الرتم يعني كل زياده بي راس المال لازم يتناسب معها وشكرا
العفو أخي
هنالك طريقة أخرى حسابية كالتالي:
input double FirstLots=0.01,
USD=100;
double LotManage()
{
double lot;
if(FirstLots>0)lot=fmax(NormalizeDouble(floor(AccountBalance()/USD)*FirstLots,2),0.01);
else lot=Lots;
return(lot);
}
FirstLots: اللوت الأساسي المطلوب لكل مبلغ USD
في هذا الكود نقوم بتحويل الحساب إلى مضاعفات مبلغ الـ USD ثم نحول الناتج إلى عدد صحيح ومن ثم نقوم بضربه باللوت الأساسي
kira-h
05-10-2017, 06:16 PM
السلام عليكم ورحمة الله
أخي الغالي م حسن
هذا الكود الذي أرسلته أو التعريفات الحقيقة أنها لا تعمل
double dn1,up1,dn2,up2,dn3,up3;
if(Close[1]>Open[1])dn1=Open[1];up1=Close[1];
if(Close[1]<Open[1])dn1=Close[1];up1=Open[1];
if(Close[2]>Open[2])dn2=Open[2];up2=Close[2];
if(Close[2]<Open[2])dn2=Close[2];up2=Open[2];
if(Close[3]>Open[3])dn3=Open[3];up3=Close[3];
if(Close[3]<Open[3])dn3=Close[3];up3=Open[3];
أرجو منك تجريب الشرط التالي في الشراء مثلاً
dn1-Low[1]+High[1]-up1>500*Point
فسترى أنه يفتح صفقات مع أو بدون تحقق الشرط أعلاه يعني أنه ممكن يفتح صفقات مع عدم تحقق الشرط أعلاه
وأنا متأكد مما أقول
أرجو المساعدة
وعليكم السلام
انتبه للأقواس، فالشرط أصلا خاطئ
أما ما قمت به فهو كمثال عن شرحك
والأفضل ان ترفق الكود كاملا مع شرح تفصيلي لما تريد
kira-h
05-10-2017, 06:22 PM
سلام عليكم اخ حسن يعطيك العافيه يارب كود ممتاز جدا
بس سوال اذا انا حابب شوف هاد ترينيغ شلون بدي ارسم خط الوه انا شوفه بس طبعا مش بروكر
وشكرا
ستقوم بعمل دالة رسم الخط ثم تضع الشروط كالتالي :
دالة رسم الخط :
void line(string name,double pr1,color clrr,int style)
{
if(ObjectFind(name)!=0)
{
ObjectCreate(name,OBJ_HLINE,0,0,pr1);
ObjectSet(name,OBJPROP_COLOR,clrr);
ObjectSet(name,OBJPROP_STYLE,style);
}
else
{
if(ObjectGet(name,OBJPROP_PRICE1)!=pr1)
{
ObjectDelete(name);
}
}
}
ثم تعدل على الشروط كالتالي:
void HidenMoveTrailingStop()
{
bool s;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
if(sy==Symbol()&&mn==MagicNo&&ot<=OP_SELL)
{
if(ot==OP_BUY)
{
if(NormalizeDouble(Ask-(HidenTrailingStep*point),Digits)>NormalizeDouble((op+(HidenTrailingStop*point)),Dig its))
{
if((NormalizeDouble(sl,Digits)<NormalizeDouble(Bid-(HidenTrailingStop*point),Digits))||(sl==0))
{
GlobalVariableSet("TS"+OrderTicket(),Bid-HidenTrailingStop*point);
line("TS",Bid-HidenTrailingStop*point,Red,0);
}
}
}
else
{
if(NormalizeDouble(Bid+(HidenTrailingStep*point),D igits)<NormalizeDouble((op-(HidenTrailingStop*point)),Digits))
{
if((NormalizeDouble(sl,Digits)>(NormalizeDouble(Ask+(HidenTrailingStop*point),Dig its)))||(sl==0))
{
GlobalVariableSet("TS"+OrderTicket(),Ask+HidenTrailingStop*point);
line("TS",Ask+HidenTrailingStop*point,Red,0);
}
}
}
}
}
}
void CloseHidenTrailingStop()
{
bool close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==OP_BUY&&GlobalVariableGet("TS"+OrderTicket())!=0)
{
if(Bid<=GlobalVariableGet("TS"+OrderTicket()))
{
close=OrderClose(OrderTicket(),OrderLots(),Bid,3*Q );
GlobalVariableDel("TS"+OrderTicket());
ObjectDelete("TS");
}
}
if(OrderType()==OP_SELL&&GlobalVariableGet("TS"+OrderTicket())!=0)
{
if(Ask>=GlobalVariableGet("TS"+OrderTicket()))
{
close=OrderClose(OrderTicket(),OrderLots(),Ask,3*Q );
GlobalVariableDel("TS"+OrderTicket());
ObjectDelete("TS");
}
}
}
}
}
kira-h
05-10-2017, 06:44 PM
السلام عليكم
اعتدنا على افضالك استاذي العزيز، لو سمحت احتاج دالة لتعديل الاهداف و الاستوبات لجميع الصفقات التي يفتحها الاكسبيرت ، مثلا فتحت الصفقة الاولى 100 هدف و 100 ستوب
بعدها تم فتح صفقة ثانية و ثالثة و عاشرة المطلوب ان يكون (مجموع) اهداف الصفقات المفتوحة جميعها بقيمة الهدف المذكور اولا الذي هو 100 و ستوب 100، بمعنى عندما تفتح الصفقة الثانية يصبح هدف كل من الصفقتين 50 و ستوبها 50، بنفس الفكرة عند فتح الصفقة العاشرة يصبح هدف كل من الصفقات 10 و ستوبها 10 اي مجموع اهداف الصفقات قيمة ثابتة تساوي الهدف و ستوب الصفقة الاولى 100 ارجو ان يكون الشرح واضحاً
وعليكم السلام
يمكنك استخدام الربح الاجمالي والخسارة الاجمالية بالنقاط
دالة إجمالي النقاط كالتالي :
double Profit_By_PIPS()
{
double pips,pipsB,pipsS;
for(int i=0;i<OrdersTotal();i++)
{
bool c=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ot=OrderType();
double op=OrderOpenPrice();
if(sy==Symbol()&&mn==MagicNo)
{
if(ot==OP_BUY){pipsB+=(Bid-op)/point;}
else if(ot==OP_SELL){pipsS+=(op-Ask)/point;}
pips=pipsB+pipsS;
}
}
return(pips);
}
ثم الشروط كالتالي :
if((Total_PIPS_Profit!=0&&Profit_By_PIPS()>=Total_PIPS_Profit)
||(Total_PIPS_Loss!=0&&Profit_By_PIPS()<=-Total_PIPS_Loss)){CloseOrders();}
والمتغيرات الخارجية كالتالي :
Total_PIPS_Profit الاربح الاجمالي بالنقاط
Total_PIPS_Loss الخسارة الاجمالية بالنقاط
ثم دالة الاغلاق كالتالي :
void CloseOrders(int type=-1)
{
bool select,close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==type||type==-1)
{
if(OrderType()==OP_BUY){close=OrderClose(OrderTick et(),OrderLots(),NormalizeDouble(Bid,Digits),30);}
if(OrderType()==OP_SELL){close=OrderClose(OrderTic ket(),OrderLots(),NormalizeDouble(Ask,Digits),30); }
if(OrderType()>OP_SELL){close=OrderDelete(OrderTicket());}
}
}
}
}
kira-h
05-10-2017, 06:45 PM
السلام عليكم لماذا هنالك خطا في الكود رغم اني كتبته كما في الشرح
وعليكم السلام
وضح اكثر، أين يوجد هذا الخطأ!
kira-h
05-10-2017, 07:21 PM
السلام عليكم .... كيف أحدد الهاي و اللو لأول شمعة 4 ساعات في الأسبوع ؟
وعليكم السلام
كالتالي:
int FirstWeeklyBar=iBarShift(Symbol(),PERIOD_H4,iTime( Symbol(),PERIOD_W1,0),false);
double high=iHigh(Symbol(),PERIOD_H4,FirstWeeklyBar-1),
low=iLow(Symbol(),PERIOD_H4,FirstWeeklyBar-1);
sabil
05-10-2017, 08:20 PM
نزلت منصة اسمها فوركس تيستر بتيح لك عمل simulation للسوق واختبار الاستراتيجيات يدوي
لكن فيه خيارات اخرى متاحة كاستخدام اكسبرت او سكريبت وغيره
بس المشكلة ان المنصة مش بتقبل صيغة mq4 او ex4
بتقبل فقط صيغة dll
حضرتك عندك فكرة عن الصيغة دي مستر حسن وازاي احول صيغة mq4 الى dll
أبو عمر
06-10-2017, 12:03 AM
وعليكم السلام
انتبه للأقواس، فالشرط أصلا خاطئ
أما ما قمت به فهو كمثال عن شرحك
والأفضل ان ترفق الكود كاملا مع شرح تفصيلي لما تريد
شكراً على الرد
لا يوجد كود إلا الذي أعطيتني إياه
لكن إذا تكرمت ممكن تكتب نفس الشرط مصحح
kira-h
06-10-2017, 02:10 AM
نزلت منصة اسمها فوركس تيستر بتيح لك عمل simulation للسوق واختبار الاستراتيجيات يدوي
لكن فيه خيارات اخرى متاحة كاستخدام اكسبرت او سكريبت وغيره
بس المشكلة ان المنصة مش بتقبل صيغة mq4 او ex4
بتقبل فقط صيغة dll
حضرتك عندك فكرة عن الصيغة دي مستر حسن وازاي احول صيغة mq4 الى dll
للأسف لم يسبق لي التعامل معها
يمكنك البحث باليوتوب أو google
kira-h
06-10-2017, 02:12 AM
شكراً على الرد
لا يوجد كود إلا الذي أعطيتني إياه
لكن إذا تكرمت ممكن تكتب نفس الشرط مصحح
أخي لا أستطيع تذكر كل المشاركات، لابد من التذكير
عموما الصحيح كالتالي :
(dn1-Low[1]+High[1]-up1)>500*Point
أبو عمر
06-10-2017, 10:40 PM
أخي لا أستطيع تذكر كل المشاركات، لابد من التذكير
عموما الصحيح كالتالي :
(dn1-Low[1]+High[1]-up1)>500*Point
أخي م حسن أرجوك تفهمني
أنت أعطيتني هذه التعريفات وهي تمثل القيم السفلية والعلوية للشمعة بصرف النظر عن كونها رابحة أو خاسرة وهو ما أريده تماماَ
double dn1,up1,dn2,up2,dn3,up3;
if(Close[1]>Open[1])dn1=Open[1];up1=Close[1];
if(Close[1]<Open[1])dn1=Close[1];up1=Open[1];
if(Close[2]>Open[2])dn2=Open[2];up2=Close[2];
if(Close[2]<Open[2])dn2=Close[2];up2=Open[2];
if(Close[3]>Open[3])dn3=Open[3];up3=Close[3];
if(Close[3]<Open[3])dn3=Close[3];up3=Open[3];
لكن يا أخي الشرط هذا لا يعمل بشكل صحيح
&&(dn1-Low[1]+High[1]-up1)>500*Point
وحسب كلامك أن هذا هو الشرط بالشكل الصحيح والأقواس
لكن ثم لكن ثم لكن الشرط لا يعمل بشكل صحيح
أرجوك أن تجربه عندك لتتأكد من صحة كلامي
كمثال أيضاَ لاحظ بالمرفق شمعة لم يتحقق الشرط حيث أن مجموع الذيل العلوي والسفلي لا يتجاوز ال 250 نقطة ومع ذلك فتح صفقة شراء والشرط يجب أن يكونا فوق الـ 500 نقطة
kira-h
07-10-2017, 12:39 AM
أخي م حسن أرجوك تفهمني
أنت أعطيتني هذه التعريفات وهي تمثل القيم السفلية والعلوية للشمعة بصرف النظر عن كونها رابحة أو خاسرة وهو ما أريده تماماَ
double dn1,up1,dn2,up2,dn3,up3;
if(Close[1]>Open[1])dn1=Open[1];up1=Close[1];
if(Close[1]<Open[1])dn1=Close[1];up1=Open[1];
if(Close[2]>Open[2])dn2=Open[2];up2=Close[2];
if(Close[2]<Open[2])dn2=Close[2];up2=Open[2];
if(Close[3]>Open[3])dn3=Open[3];up3=Close[3];
if(Close[3]<Open[3])dn3=Close[3];up3=Open[3];
لكن يا أخي الشرط هذا لا يعمل بشكل صحيح
&&(dn1-Low[1]+High[1]-up1)>500*Point
وحسب كلامك أن هذا هو الشرط بالشكل الصحيح والأقواس
لكن ثم لكن ثم لكن الشرط لا يعمل بشكل صحيح
أرجوك أن تجربه عندك لتتأكد من صحة كلامي
كمثال أيضاَ لاحظ بالمرفق شمعة لم يتحقق الشرط حيث أن مجموع الذيل العلوي والسفلي لا يتجاوز ال 250 نقطة ومع ذلك فتح صفقة شراء والشرط يجب أن يكونا فوق الـ 500 نقطة
أخي الكريم اتبع المنطق وستجد الحل
الشرط الذي قمت به لا يعبر عن ما تريده أي أن الشرط خاطئ من الأساس حتى لو صححنا الأقواس
والجملة التالية غير صحيحة "مجموع الذيل العلوي والسفلي لا يتجاوز ال 250 نقطة" كيف ذلك! إلا إذا تقصد فرق الذيل العلوي والسفلي؟ وحتى لنفرض أيضا أنك تقصد إجمالي الذيول العلوية والسفلية السابقة فتلك الدوال لا تفي بالغرض لأنها فقط تعطيك أسعار أدنى افتتاحات وإغلاقات الشموع وليس الذيول (الهاي واللو!
اشرح ما تريد بمثال على الشارت حتى أستطيع فهمك
أبو عمر
07-10-2017, 10:24 AM
أخي الكريم اتبع المنطق وستجد الحل
الشرط الذي قمت به لا يعبر عن ما تريده أي أن الشرط خاطئ من الأساس حتى لو صححنا الأقواس
والجملة التالية غير صحيحة "مجموع الذيل العلوي والسفلي لا يتجاوز ال 250 نقطة" كيف ذلك! إلا إذا تقصد فرق الذيل العلوي والسفلي؟ وحتى لنفرض أيضا أنك تقصد إجمالي الذيول العلوية والسفلية السابقة فتلك الدوال لا تفي بالغرض لأنها فقط تعطيك أسعار أدنى افتتاحات وإغلاقات الشموع وليس الذيول (الهاي واللو!
اشرح ما تريد بمثال على الشارت حتى أستطيع فهمك
الحقيقة أن الموضوع في غاية السهولة وهو جمع وطرح جبري .. وعندما قلت لي المشكلة في الأقواس أيضاً لم يننفع ...
ما هو الخطأ المنطقي أو الرياضي في هذا الشرط
&&(dn1-Low[1]+High[1]-up1)>500*Point
وإذا يوجد خطأ برمجي أين هو ؟
وحاصله هو المجموع الجبري بالنقاط .. للذيلين العلوي والسفلي , أين الخطأ في هذا ؟؟؟
الذي يحصل معي هو أنه يفتح صفقة ولا يحقق الشرط بحيث يكون مجموع الذيلين أكبر من 500 نقطة
بمعنى أوضح يفتح صفقة وربما يكون مجموع الذيلين أقل من 500 نقطة ..مع أنه في الشرط أكثر من 500 نقطة لماذا ؟
هنا الإشكال فقط
لا أدري يبدو أنه من شدة سهولة المسألة صارت صعبة
Aminox
07-10-2017, 03:23 PM
تم التصحيح بالنسخة المرفقة
شكرا كثيرا لك أخ حسن تمام كل شيئ على ما يرام
Aminox
07-10-2017, 04:42 PM
أخي حسن السلام عليكم
قمت ببرمجة إكسبيرت للمضاعفات لكن لم أستطيع إكماله
تفضل صورة توضيحية للفكرة والإكسبيرت في المرفقات
يقوم بعمل شراء بتيك بروفيت وستوب ووضع أمر معلق بيعي على الستوب و عندما يقوم
بالإنعكاس يقوم بضرب الستوب وتفعيل أمر البيع ...هنا يقوم بوضع أمر معلق شرائي
ايضا بتيك بروفيت والستوب وهكذا لكن المشكل في الإستمرار لا أعرف كيف يمكنه أن يستمر
في فعل هذا إلى حين ضرب التيك بروفيت الفوليم يقوم بالمضاعفة في العدد 1.34
تفضل أخي حسن
3504
sal_moh85
07-10-2017, 05:27 PM
ستقوم بعمل دالة رسم الخط ثم تضع الشروط كالتالي :
دالة رسم الخط :
void line(string name,double pr1,color clrr,int style)
{
if(ObjectFind(name)!=0)
{
ObjectCreate(name,OBJ_HLINE,0,0,pr1);
ObjectSet(name,OBJPROP_COLOR,clrr);
ObjectSet(name,OBJPROP_STYLE,style);
}
else
{
if(ObjectGet(name,OBJPROP_PRICE1)!=pr1)
{
ObjectDelete(name);
}
}
}
ثم تعدل على الشروط كالتالي:
void HidenMoveTrailingStop()
{
bool s;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
if(sy==Symbol()&&mn==MagicNo&&ot<=OP_SELL)
{
if(ot==OP_BUY)
{
if(NormalizeDouble(Ask-(HidenTrailingStep*point),Digits)>NormalizeDouble((op+(HidenTrailingStop*point)),Dig its))
{
if((NormalizeDouble(sl,Digits)<NormalizeDouble(Bid-(HidenTrailingStop*point),Digits))||(sl==0))
{
GlobalVariableSet("TS"+OrderTicket(),Bid-HidenTrailingStop*point);
line("TS",Bid-HidenTrailingStop*point,Red,0);
}
}
}
else
{
if(NormalizeDouble(Bid+(HidenTrailingStep*point),D igits)<NormalizeDouble((op-(HidenTrailingStop*point)),Digits))
{
if((NormalizeDouble(sl,Digits)>(NormalizeDouble(Ask+(HidenTrailingStop*point),Dig its)))||(sl==0))
{
GlobalVariableSet("TS"+OrderTicket(),Ask+HidenTrailingStop*point);
line("TS",Ask+HidenTrailingStop*point,Red,0);
}
}
}
}
}
}
void CloseHidenTrailingStop()
{
bool close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==OP_BUY&&GlobalVariableGet("TS"+OrderTicket())!=0)
{
if(Bid<=GlobalVariableGet("TS"+OrderTicket()))
{
close=OrderClose(OrderTicket(),OrderLots(),Bid,3*Q );
GlobalVariableDel("TS"+OrderTicket());
ObjectDelete("TS");
}
}
if(OrderType()==OP_SELL&&GlobalVariableGet("TS"+OrderTicket())!=0)
{
if(Ask>=GlobalVariableGet("TS"+OrderTicket()))
{
close=OrderClose(OrderTicket(),OrderLots(),Ask,3*Q );
GlobalVariableDel("TS"+OrderTicket());
ObjectDelete("TS");
}
}
}
}
}
مشكور جدا اخ حسن ولله يجزيك كل خير
kira-h
07-10-2017, 05:59 PM
الحقيقة أن الموضوع في غاية السهولة وهو جمع وطرح جبري .. وعندما قلت لي المشكلة في الأقواس أيضاً لم يننفع ...
ما هو الخطأ المنطقي أو الرياضي في هذا الشرط
&&(dn1-Low[1]+High[1]-up1)>500*Point
وإذا يوجد خطأ برمجي أين هو ؟
وحاصله هو المجموع الجبري بالنقاط .. للذيلين العلوي والسفلي , أين الخطأ في هذا ؟؟؟
الذي يحصل معي هو أنه يفتح صفقة ولا يحقق الشرط بحيث يكون مجموع الذيلين أكبر من 500 نقطة
بمعنى أوضح يفتح صفقة وربما يكون مجموع الذيلين أقل من 500 نقطة ..مع أنه في الشرط أكثر من 500 نقطة لماذا ؟
هنا الإشكال فقط
لا أدري يبدو أنه من شدة سهولة المسألة صارت صعبة
أخي أنت من يصعب عليك المسألة
واستفساري واضح بالرد السابق، لكن فقط لا تركز
اشرح المطلوب تفصيلا يعني بالارقام كمثال عملي
kira-h
07-10-2017, 06:00 PM
شكرا كثيرا لك أخ حسن تمام كل شيئ على ما يرام
بالتوفيق إن شاء الله
kira-h
07-10-2017, 06:00 PM
مشكور جدا اخ حسن ولله يجزيك كل خير
بالتوفيق إن شاء الله
kira-h
07-10-2017, 06:47 PM
أخي حسن السلام عليكم
قمت ببرمجة إكسبيرت للمضاعفات لكن لم أستطيع إكماله
تفضل صورة توضيحية للفكرة والإكسبيرت في المرفقات
يقوم بعمل شراء بتيك بروفيت وستوب ووضع أمر معلق بيعي على الستوب و عندما يقوم
بالإنعكاس يقوم بضرب الستوب وتفعيل أمر البيع ...هنا يقوم بوضع أمر معلق شرائي
ايضا بتيك بروفيت والستوب وهكذا لكن المشكل في الإستمرار لا أعرف كيف يمكنه أن يستمر
في فعل هذا إلى حين ضرب التيك بروفيت الفوليم يقوم بالمضاعفة في العدد 1.34
تفضل أخي حسن
وعليكم السلام
الشروط كلها خاطئة ولا علاقة لها بما تريد
عموما مرفق الاكسبيرت مفتوح الكود راجعه جيدا وعدل حجم العقود بما تريد
Aminox
08-10-2017, 03:48 AM
وعليكم السلام
الشروط كلها خاطئة ولا علاقة لها بما تريد
عموما مرفق الاكسبيرت مفتوح الكود راجعه جيدا وعدل حجم العقود بما تريد
يا أخي حسن عجز لساني عن شكرك
يا رب كل ما تريد يتحقق لك
شكرا كثيرا يا أخي سوف يكون
هذا العمل في ميزان حسناتك إن شاء الله
sal_moh85
08-10-2017, 11:44 AM
سلام عليكم اخ حسن ساويت اكسبريت بيعتمد على باي ستوب وسيل ستوب في فتح الصفقات مع امكانية تحريك الصفقه المعلقه بي عدد نقاط
عندي فكره حابب ضيفها لي اكسبريت
مثال حاليا فتح صفقتين سيل ستوب وباي ستوب هدف كل صفقه 30 نقطه وخسارة كل صفقه 10
الفكره يلي حابب ضيفها بس لما يتحرك اي امر من سيل ستوب او باي ستوب تعديل الخساره وتعيديل الربح هي نقطه اوك تمام حسنت عدل الخساره وربح اد ما بدي
بس يلي ما عم يظبط معي ترينغ ستوب
ساوية دالتين ترينغ ستوب وحده لي امر العاديه وتاني بعد التحرك امر المعلق
بس ما عم اعرف شلون بدي خلي اكسبريت يميز هل هي صفقه تحركة بشان يفعل كود تاني او ما تحركة بشان يفعل كود اول
وشكرا
أبو عمر
08-10-2017, 01:17 PM
أخي أنت من يصعب عليك المسألة
واستفساري واضح بالرد السابق، لكن فقط لا تركز
اشرح المطلوب تفصيلا يعني بالارقام كمثال عملي
أخي إنسى السابق جميعاً
أريد كود يكون شرط الشراء فيه هو أن يتجاوز مجموع الذيل العلوي للشمعة الأولى+ السفلي للشمعة الأولى + الذيل العلوي للشمعة الثانية + السفلي للشمعة الثانية
الـ 500 نقطة
يعني المجموع الجبري للذيول الأربعة أكبر من 500 نقطة
kira-h
08-10-2017, 04:27 PM
أخي إنسى السابق جميعاً
أريد كود يكون شرط الشراء فيه هو أن يتجاوز مجموع الذيل العلوي للشمعة الأولى+ السفلي للشمعة الأولى + الذيل العلوي للشمعة الثانية + السفلي للشمعة الثانية
الـ 500 نقطة
يعني المجموع الجبري للذيول الأربعة أكبر من 500 نقطة
مثال بالارقام !
kira-h
08-10-2017, 04:27 PM
يا أخي حسن عجز لساني عن شكرك
يا رب كل ما تريد يتحقق لك
شكرا كثيرا يا أخي سوف يكون
هذا العمل في ميزان حسناتك إن شاء الله
وإياك أخي الكريم
والله الموفق
kira-h
08-10-2017, 04:31 PM
سلام عليكم اخ حسن ساويت اكسبريت بيعتمد على باي ستوب وسيل ستوب في فتح الصفقات مع امكانية تحريك الصفقه المعلقه بي عدد نقاط
عندي فكره حابب ضيفها لي اكسبريت
مثال حاليا فتح صفقتين سيل ستوب وباي ستوب هدف كل صفقه 30 نقطه وخسارة كل صفقه 10
الفكره يلي حابب ضيفها بس لما يتحرك اي امر من سيل ستوب او باي ستوب تعديل الخساره وتعيديل الربح هي نقطه اوك تمام حسنت عدل الخساره وربح اد ما بدي
بس يلي ما عم يظبط معي ترينغ ستوب
ساوية دالتين ترينغ ستوب وحده لي امر العاديه وتاني بعد التحرك امر المعلق
بس ما عم اعرف شلون بدي خلي اكسبريت يميز هل هي صفقه تحركة بشان يفعل كود تاني او ما تحركة بشان يفعل كود اول
وشكرا
وعليكم السلام
بالنسبة للاوامر المعلقة لا يمكنك تحريها بل تقوم بالحذف وتعيد فتحها
بالنسبة لتمييز الصفقات بنفس الاكسبيرت يمكنك ذلك إما من خلال الكومنت أو الماجك نمبر للصفقة وتضع مثلا دالة الترلينتغ بدلالتها
Aminox
08-10-2017, 05:07 PM
مرحبا أخي حسن
لدي إكسبيرت لتلاقي الموفينجات
عندما أقوم بعمل 3- مثلا في Décalage
لا يعمل معي الإكسبيرت ما المشكل في هذا
iMA(Symbol(),0,35,-3,0,0,2)
sal_moh85
08-10-2017, 06:50 PM
وعليكم السلام
بالنسبة للاوامر المعلقة لا يمكنك تحريها بل تقوم بالحذف وتعيد فتحها
بالنسبة لتمييز الصفقات بنفس الاكسبيرت يمكنك ذلك إما من خلال الكومنت أو الماجك نمبر للصفقة وتضع مثلا دالة الترلينتغ بدلالتها
سلام عليكم اخ حسن انا ساوية كود بحسن حرك فيه الاوامر المعلقه ما عندي مشكله بي هذه النقطه
المشكله عندي بي ترينغ ستوب بشان وضحلك اكتير الفكره
عندي صفقتين باي ستوب وسيل ستوب هي اول صفقتين يضعهم الاكسبريت على سبيل المثال ستوب لوز 10 وتيك بروفيت 30 وترينغ ستوب لوز 15 هي اعدادات الاكسبريت الافتراضيه
طيب تحرك الامر المعلق اي واحد منهون بي هي حاله اي امر معلق تحرك يعدل ستوب لوز يصبح 20 وتيك بروفيت 50 وترينغ ستوب لوز 20 حاليا انا لا اواجه مشكله في تعديل تيك بروفيت وستوب لوز عم واجه مشكله في ترينغ ستوب شلون
ولي افاده هذا كود تحريك الاوامر المعلقه
void pandingTringsell(int Magic )
{
for(int ii=0;ii<OrdersTotal();ii++)
{
if(OrderSelect(ii,SELECT_BY_POS,MODE_TRADES))
double op=OrderOpenPrice();
double ppoint=MarketInfo(OrderSymbol(), MODE_POINT);
double pBid=MarketInfo(OrderSymbol(), MODE_BID);
double pAsk=MarketInfo(OrderSymbol(), MODE_ASK);
{
if(OrderType()==OP_SELLSTOP&&OrderMagicNumber() == Magic)
{
double prb=pBid-(Limitpip*Point);
double st=Stoploss*10;
double tl=Takeprofit*10;
double slb=prb+st*Point;
double tpb=prb-tl*Point;
if(pBid-Limitpip*Point>op)
{
sell= OrderModify(OrderTicket(),prb,slb,tpb,0,Red);
}
}}}
}
sal_moh85
08-10-2017, 07:14 PM
هدول صورتان لي اكسبريت في الحاله افتراضيه والحاله تحرك35243525
الفكره هلق بي تعديل ترينغ ستوب شلون بدي وصل لي اكسبريت انو هاد الامر تحرك معنها لازم تفعل ترينيغ الستوب معدل قيم يعني لو ترينغ ستوب على وضع افتراضي 15 قيمته بس لما يتحرك امر معلق تعدل قيمة ترينيغ ستوب الى 25 هي مشكله الاتي
وشكرا
nuage
09-10-2017, 12:16 AM
السلام عليكم
شكرا استاذ حسن على جهودك و مثابرتك المشكورة لمساعدتنا، لو سمحت اريد أن اعرف هل الكود صحيح او فيه اخطاء
bool Sell(string symbol)
{
double t=iIchimoku(symbol,0,9,26,52,MODE_TENKANSEN,1);
double k=iIchimoku(symbol,0,9,26,52,MODE_KIJUNSEN,1);
double c=iIchimoku(symbol,0,9,26,52,MODE_CHIKOUSPAN,1);
double a=iIchimoku(symbol,0,9,26,52,MODE_SENKOUSPANA,1);
double b=iIchimoku(symbol,0,9,26,52,MODE_SENKOUSPANB,1);
if(t<k&&k<a&&k<b&&t<a&&t<b&&c<a&&c<b)return(true);
else return(false);
}
و لك جزيل الشكر
kira-h
09-10-2017, 01:51 AM
مرحبا أخي حسن
لدي إكسبيرت لتلاقي الموفينجات
عندما أقوم بعمل 3- مثلا في Décalage
لا يعمل معي الإكسبيرت ما المشكل في هذا
iMA(Symbol(),0,35,-3,0,0,2)
اكتب الشروط كاملة للمراجعة
kira-h
09-10-2017, 02:18 AM
سلام عليكم اخ حسن انا ساوية كود بحسن حرك فيه الاوامر المعلقه ما عندي مشكله بي هذه النقطه
المشكله عندي بي ترينغ ستوب بشان وضحلك اكتير الفكره
عندي صفقتين باي ستوب وسيل ستوب هي اول صفقتين يضعهم الاكسبريت على سبيل المثال ستوب لوز 10 وتيك بروفيت 30 وترينغ ستوب لوز 15 هي اعدادات الاكسبريت الافتراضيه
طيب تحرك الامر المعلق اي واحد منهون بي هي حاله اي امر معلق تحرك يعدل ستوب لوز يصبح 20 وتيك بروفيت 50 وترينغ ستوب لوز 20 حاليا انا لا اواجه مشكله في تعديل تيك بروفيت وستوب لوز عم واجه مشكله في ترينغ ستوب شلون
ولي افاده هذا كود تحريك الاوامر المعلقه
void pandingTringsell(int Magic )
{
for(int ii=0;ii<OrdersTotal();ii++)
{
if(OrderSelect(ii,SELECT_BY_POS,MODE_TRADES))
double op=OrderOpenPrice();
double ppoint=MarketInfo(OrderSymbol(), MODE_POINT);
double pBid=MarketInfo(OrderSymbol(), MODE_BID);
double pAsk=MarketInfo(OrderSymbol(), MODE_ASK);
{
if(OrderType()==OP_SELLSTOP&&OrderMagicNumber() == Magic)
{
double prb=pBid-(Limitpip*Point);
double st=Stoploss*10;
double tl=Takeprofit*10;
double slb=prb+st*Point;
double tpb=prb-tl*Point;
if(pBid-Limitpip*Point>op)
{
sell= OrderModify(OrderTicket(),prb,slb,tpb,0,Red);
}
}}}
}
وعليكم السلام
تلك الدالة ليست لتحريك الأمر المعلق فلا يمكن ذلك، ولكن الدالة تلقائيا تقوم بحذف الأمر وإعادة فتحه وهذا ما قصدته،
عموما بالنسبة لسؤالك هناك عدة طرق، أفضلها عن طريق استخدام دوال الجلوبال
مثال :
لدينا المتغير الخارجي للتريلينغ ستوب كالتالي :
input double TralingStop1=15;
input double TralingStop2=20;
ثم بالدالة الرئيسية OnInit نضع الشرط التالي :
int init()
{
GlobalVariableSet(Symbol()+magic+"SS",TrailingStop1);
}
لحفظ قيمة التريلنغ الأول عند بداية عمل الاكسبيرت
ثم نضع دالة التريلينغ بدلالة قيمة الترلينغ :
مثال :
void MoveTrailingStop(double Trail)
{
bool s,mod;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
if(sy==Symbol()&&mn==magic&&ot<=OP_SELL)
{
if(ot==OP_BUY)
{
if(NormalizeDouble(Ask,Digits)>NormalizeDouble((op+(Trail*point)),Digits))
{
if((NormalizeDouble(sl,Digits)<NormalizeDouble(Bid-(Trail*point),Digits))||(sl==0))
{
mod=OrderModify(tk,op,NormalizeDouble(Bid-(Trail*point),Digits),tp,0,Blue);
}
}
}
else
{
if(NormalizeDouble(Bid,Digits)<NormalizeDouble((op-(Trail*point)),Digits))
{
if((NormalizeDouble(sl,Digits)>(NormalizeDouble(Ask+(Trail*point),Digits)))||(sl= =0))
{
mod=OrderModify(tk,op,NormalizeDouble(Ask+(Trail*p oint),Digits),tp,0,Red);
}
}
}
}
}
}
ونعدل على دالة تعديل الامر المعلق بحيث عند تفعيل التعديل يتم تعديل كذلك القيمة المخزنة بدالة الجلوبال بتخزين قيمة الترلينغ الثاني:
void pandingTringsell()
{
for(int ii=0;ii<OrdersTotal();ii++)
{
if(OrderSelect(ii,SELECT_BY_POS,MODE_TRADES))
double op=OrderOpenPrice();
double ppoint=MarketInfo(OrderSymbol(), MODE_POINT);
double pBid=MarketInfo(OrderSymbol(), MODE_BID);
double pAsk=MarketInfo(OrderSymbol(), MODE_ASK);
{
if(OrderType()==OP_SELLSTOP&&OrderMagicNumber()==magic)
{
double prb=pBid-(50*Point);
double st=300*10;
double tl=300*10;
double slb=prb+st*Point;
double tpb=prb-tl*Point;
if(pBid-50*Point>op)
{
bool sell= OrderModify(OrderTicket(),prb,slb,tpb,0,Red);
GlobalVariableSet(Symbol()+magic+"SS",TrailingStop2);
}
}
}
}
}
ثم نضع شروط الترلينغ بالدالة الرئيسية OnTick حيت يعمل الترلينغ ستوب بناءا على قيمة الترلينغ المخزنة بالجلوبال كالتالي :
void OnTick()
{
double trailingstop=GlobalVariableGet(Symbol()+magic+"SS");
if(trailingstop>0)MoveTrailingStop(trailingstop);
}
kira-h
09-10-2017, 02:28 AM
السلام عليكم
شكرا استاذ حسن على جهودك و مثابرتك المشكورة لمساعدتنا، لو سمحت اريد أن اعرف هل الكود صحيح او فيه اخطاء
bool Sell(string symbol)
{
double t=iIchimoku(symbol,0,9,26,52,MODE_TENKANSEN,1);
double k=iIchimoku(symbol,0,9,26,52,MODE_KIJUNSEN,1);
double c=iIchimoku(symbol,0,9,26,52,MODE_CHIKOUSPAN,1);
double a=iIchimoku(symbol,0,9,26,52,MODE_SENKOUSPANA,1);
double b=iIchimoku(symbol,0,9,26,52,MODE_SENKOUSPANB,1);
if(t<k&&k<a&&k<b&&t<a&&t<b&&c<a&&c<b)return(true);
else return(false);
}
و لك جزيل الشكر
وعليكم السلام
نعم الشروط صحيحة منطقيا، ولكن لا اعلم إن كانت صحيحة حسب ما تريد من شروط على الشارت،
nuage
09-10-2017, 09:11 AM
شكرا جزيلا استاذي الكود يعمل و بشكل جيد ، استشارة شبيهة اريد معرفة ان كان الكود التالي صحيحيا حيث انه لا يقوم بفتح اي صفقات، فهلا اعلمتني اين الخطأ ان كان موجوداً و كيفية الحل مع الشكر والتقدير
bool Buy(string symbol)
{
double t=iIchimoku(symbol,0,9,26,52,MODE_TENKANSEN,1);
double k=iIchimoku(symbol,0,9,26,52,MODE_KIJUNSEN,1);
double c=iIchimoku(symbol,0,9,26,52,MODE_CHIKOUSPAN,1);
double a=iIchimoku(symbol,0,9,26,52,MODE_SENKOUSPANA,1);
double b=iIchimoku(symbol,0,9,26,52,MODE_SENKOUSPANB,1);
if(t>k&&k>a&&k>b&&t>a&&t>b&&c>a&&c>b)return(true);
else return(false);
}
Waddah
09-10-2017, 11:35 AM
السلام عليكم
أستاذ ممكن الكود الذي يحقق : إغلاق نصف العقد بعد تحقيق ربح معين من النقاط ووضع الستوب على الدخول .....ولك جزيل الشكر
sal_moh85
09-10-2017, 01:30 PM
وعليكم السلام
تلك الدالة ليست لتحريك الأمر المعلق فلا يمكن ذلك، ولكن الدالة تلقائيا تقوم بحذف الأمر وإعادة فتحه وهذا ما قصدته،
عموما بالنسبة لسؤالك هناك عدة طرق، أفضلها عن طريق استخدام دوال الجلوبال
مثال :
لدينا المتغير الخارجي للتريلينغ ستوب كالتالي :
input double TralingStop1=15;
input double TralingStop2=20;
ثم بالدالة الرئيسية OnInit نضع الشرط التالي :
int init()
{
GlobalVariableSet(Symbol()+magic+"SS",TrailingStop1);
}
لحفظ قيمة التريلنغ الأول عند بداية عمل الاكسبيرت
ثم نضع دالة التريلينغ بدلالة قيمة الترلينغ :
مثال :
void MoveTrailingStop(double Trail)
{
bool s,mod;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
if(sy==Symbol()&&mn==magic&&ot<=OP_SELL)
{
if(ot==OP_BUY)
{
if(NormalizeDouble(Ask,Digits)>NormalizeDouble((op+(Trail*point)),Digits))
{
if((NormalizeDouble(sl,Digits)<NormalizeDouble(Bid-(Trail*point),Digits))||(sl==0))
{
mod=OrderModify(tk,op,NormalizeDouble(Bid-(Trail*point),Digits),tp,0,Blue);
}
}
}
else
{
if(NormalizeDouble(Bid,Digits)<NormalizeDouble((op-(Trail*point)),Digits))
{
if((NormalizeDouble(sl,Digits)>(NormalizeDouble(Ask+(Trail*point),Digits)))||(sl= =0))
{
mod=OrderModify(tk,op,NormalizeDouble(Ask+(Trail*p oint),Digits),tp,0,Red);
}
}
}
}
}
}
ونعدل على دالة تعديل الامر المعلق بحيث عند تفعيل التعديل يتم تعديل كذلك القيمة المخزنة بدالة الجلوبال بتخزين قيمة الترلينغ الثاني:
void pandingTringsell()
{
for(int ii=0;ii<OrdersTotal();ii++)
{
if(OrderSelect(ii,SELECT_BY_POS,MODE_TRADES))
double op=OrderOpenPrice();
double ppoint=MarketInfo(OrderSymbol(), MODE_POINT);
double pBid=MarketInfo(OrderSymbol(), MODE_BID);
double pAsk=MarketInfo(OrderSymbol(), MODE_ASK);
{
if(OrderType()==OP_SELLSTOP&&OrderMagicNumber()==magic)
{
double prb=pBid-(50*Point);
double st=300*10;
double tl=300*10;
double slb=prb+st*Point;
double tpb=prb-tl*Point;
if(pBid-50*Point>op)
{
bool sell= OrderModify(OrderTicket(),prb,slb,tpb,0,Red);
GlobalVariableSet(Symbol()+magic+"SS",TrailingStop2);
}
}
}
}
}
ثم نضع شروط الترلينغ بالدالة الرئيسية OnTick حيت يعمل الترلينغ ستوب بناءا على قيمة الترلينغ المخزنة بالجلوبال كالتالي :
void OnTick()
{
double trailingstop=GlobalVariableGet(Symbol()+magic+"SS");
if(trailingstop>0)MoveTrailingStop(trailingstop);
}
مشكور جدا على مساعده اخ حسن كود مختصر واحترافي
sal_moh85
09-10-2017, 02:38 PM
سلام عليكم اخ حسن ولله يجزيك كل خير على مساعدتك
في صوره مثال في كود الجديد يلي حضرتك ارفقته مو هيك انا بدي كود3530
صوره الثانيه اريد ان يعمل الاكسبريت بي هاذه الطريقه حصرا في ترينيغ ستوب
3532
وشكرا
kira-h
09-10-2017, 05:50 PM
شكرا جزيلا استاذي الكود يعمل و بشكل جيد ، استشارة شبيهة اريد معرفة ان كان الكود التالي صحيحيا حيث انه لا يقوم بفتح اي صفقات، فهلا اعلمتني اين الخطأ ان كان موجوداً و كيفية الحل مع الشكر والتقدير
bool Buy(string symbol)
{
double t=iIchimoku(symbol,0,9,26,52,MODE_TENKANSEN,1);
double k=iIchimoku(symbol,0,9,26,52,MODE_KIJUNSEN,1);
double c=iIchimoku(symbol,0,9,26,52,MODE_CHIKOUSPAN,1);
double a=iIchimoku(symbol,0,9,26,52,MODE_SENKOUSPANA,1);
double b=iIchimoku(symbol,0,9,26,52,MODE_SENKOUSPANB,1);
if(t>k&&k>a&&k>b&&t>a&&t>b&&c>a&&c>b)return(true);
else return(false);
}
منطقيا الكود سليم، ولم يفتح صفقات ربما لم تتحقق الشروط أو لسبب آخر قد تجده بخانة الجورنال
kira-h
09-10-2017, 05:51 PM
مشكور جدا على مساعده اخ حسن كود مختصر واحترافي
بالتوفيق إن شاء الله
والله الموفق
kira-h
09-10-2017, 06:10 PM
سلام عليكم اخ حسن ولله يجزيك كل خير على مساعدتك
في صوره مثال في كود الجديد يلي حضرتك ارفقته مو هيك انا بدي كود3530
صوره الثانيه اريد ان يعمل الاكسبريت بي هاذه الطريقه حصرا في ترينيغ ستوب
3532
وشكرا
وعليكم السلام
هذا ما يقوم به الكود السابق، فلا تتغير قيمة التريلينغ من 1 إلى 2 إلا بعد تفعيل وظيفة تعديل سعر الأمر المعلق
kira-h
09-10-2017, 06:22 PM
السلام عليكم
أستاذ ممكن الكود الذي يحقق : إغلاق نصف العقد بعد تحقيق ربح معين من النقاط ووضع الستوب على الدخول .....ولك جزيل الشكر
وعليكم السلام
ستقوم بعمل دالة لمعرفة عدد الاغلاقات الجزئية بنفس الصفقة كالتالي :
//+---------------Count closed orders in history that match open price & open time
int OrderCloseCount(double openprice,datetime opentime)
{
int closecount=0;
int i=0;
while(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
i++; // increment order counter
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=Ma gicNo)continue; // order is not for this symbol, go to next order
if(OrderOpenPrice()==openprice&&OrderOpenTime()==opentime)closecount++;
}
return(closecount);
}
ثم دالة الاغلاق الجزئي للصفقة كالتالي :
void PartialClose()
{
bool close,modify;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
bool select=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
datetime ot=OrderOpenTime();
double op=OrderOpenPrice();
double ol=OrderLots();
double sl=OrderStopLoss();
double tp=OrderTakeProfit();
int t=OrderTicket();
int oty=OrderType();
int closecount=OrderCloseCount(op,ot);
double pc=NormalizeDouble(50*ol/100,2);
{
if(oty==OP_BUY)
{
if(Bid>=op+PartialProfit*point&&closecount<1)
{
close=OrderClose(t,pc,Bid,30);
OrdersModify(OP_BUY);
}
}
if(oty==OP_SELL)
{
if(Ask<=op-PartialProfit*point&&closecount<1)
{
close=OrderClose(t,pc,Ask,30);
OrdersModify(OP_SELL);
}
}
}
}
}
ودالة نقل الوقف إلى الدخول كالتالي :
void OrdersModify(int type)
{
bool s,m;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
int tk=OrderTicket(),
ty=OrderType(),
mn=OrderMagicNumber() ;
if(sy==Symbol()&&mn==MagicNo&&ty==type)
{
if(ty==OP_SELL)
{
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(op, Digits))
{
m=OrderModify(tk,op,op,tp,0,Red);
}
}
if(ty==OP_BUY)
{
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(op, Digits))
{
m=OrderModify(tk,op,op,tp,0,Blue);
}
}
}
}
}
بحيث المتغير الخارجي للهدف الأول كالتالي :
input double PartialProfit=20;
والشروط بالدالة الرئيسية كالتالي :
void OnTick()
{
if(PartialProfit>0)PartialClose();
}
أبو عمر
10-10-2017, 09:31 AM
مثال بالارقام !
أخي حسن الحبيب أرفق لك شارت والأسهم عليه والمقصود واضح هو مجموع الذيول الأربعة لأخر شمعتين هذا الكود المطلوب فقط
Waddah
10-10-2017, 12:31 PM
السلام عليكم أستاذ
لشموع الهيكن أشي - كيف نحدد لون الشمعة السابقة (فقط لون الشمعة السابقة وليس تغيير اللون ) حمراء أم بيضاء ؟
Waddah
10-10-2017, 01:30 PM
وعليكم السلام
كالتالي:
int FirstWeeklyBar=iBarShift(Symbol(),PERIOD_H4,iTime( Symbol(),PERIOD_W1,0),false);
double high=iHigh(Symbol(),PERIOD_H4,FirstWeeklyBar-1),
low=iLow(Symbol(),PERIOD_H4,FirstWeeklyBar-1);
شكرا جزيلا للرد ...تتمة بسيطة لو سمحت : استخدمت الكود التالي لرسم خطوط أفقية عند الهاي واللو - لكن لم يتم رسم إلا خط واحد , ممكن تشوف وين الخطأ
ObjectCreate(0,"High",OBJ_HLINE,0,0,high);
ObjectSetInteger(0,"High",OBJPROP_COLOR,Aqua);
ObjectSetInteger(0,"High",OBJPROP_WIDTH,2);
ObjectSetInteger(0,"High",OBJPROP_STYLE,0);
ObjectCreate(0,"Low",OBJ_HLINE,0,0,low);
ObjectSetInteger(0,"Low",OBJPROP_COLOR,Orange);
ObjectSetInteger(0,"Low",OBJPROP_WIDTH,2);
ObjectSetInteger(0,"Low",OBJPROP_STYLE,0);
kira-h
10-10-2017, 09:04 PM
شكرا جزيلا للرد ...تتمة بسيطة لو سمحت : استخدمت الكود التالي لرسم خطوط أفقية عند الهاي واللو - لكن لم يتم رسم إلا خط واحد , ممكن تشوف وين الخطأ
ObjectCreate(0,"High",OBJ_HLINE,0,0,high);
ObjectSetInteger(0,"High",OBJPROP_COLOR,Aqua);
ObjectSetInteger(0,"High",OBJPROP_WIDTH,2);
ObjectSetInteger(0,"High",OBJPROP_STYLE,0);
ObjectCreate(0,"Low",OBJ_HLINE,0,0,low);
ObjectSetInteger(0,"Low",OBJPROP_COLOR,Orange);
ObjectSetInteger(0,"Low",OBJPROP_WIDTH,2);
ObjectSetInteger(0,"Low",OBJPROP_STYLE,0);
الدوال سليمة وسيتم رسم الخطين
تأكد من صحة معادلة الهاي واللو
kira-h
10-10-2017, 09:09 PM
السلام عليكم أستاذ
لشموع الهيكن أشي - كيف نحدد لون الشمعة السابقة (فقط لون الشمعة السابقة وليس تغيير اللون ) حمراء أم بيضاء ؟
وعيلكم السلام
مثال :
double h0=iCustom(Symbol(),0,"Heiken Ashi",0,2),
h1=iCustom(Symbol(),0,"Heiken Ashi",1,2),
h2=iCustom(Symbol(),0,"Heiken Ashi",2,2),
h3=iCustom(Symbol(),0,"Heiken Ashi",3,2);
if(h0<h1&&h2<h3)//شرط شمعة بيضاء
if(h0>h1&&h2>h3)//شرط شمعة حمراء
kira-h
10-10-2017, 09:13 PM
أخي حسن الحبيب أرفق لك شارت والأسهم عليه والمقصود واضح هو مجموع الذيول الأربعة لأخر شمعتين هذا الكود المطلوب فقط
مثال بالارقام فقط
يعني تحدد طريقة الجمع والمحصلة بالاسعار الحقيقية...
لأني أجد تناقض فيما تريد
مجموح الذيول الأربعة سيكون الناتج عبارة عن إجمالي أسعار وليس 500 نقطة كما كتبت بالشروط سابقا
Waddah
11-10-2017, 12:23 PM
أستاذ : الكود يغلق نصف العقد لكن لا ينقل الستوب على سعر الدخول ممكن مراجعة للكود لو تكرمت
Waddah
11-10-2017, 01:48 PM
الدوال سليمة وسيتم رسم الخطين
تأكد من صحة معادلة الهاي واللو
السلام عليكم ...
الكود مع معادلة الهاي و اللو ( أظن السبب في رقم الشمعة ) ممكن نظرة لو سمحت
int FirstWeeklyBar=iBarShift(Symbol(),PERIOD_H4,iTime( Symbol(),PERIOD_W1,0),false);
double H_High=iHigh(Symbol(),PERIOD_H4,FirstWeeklyBar-1),
H_Low=iLow(Symbol(),PERIOD_H4,FirstWeeklyBar-1);
ObjectCreate(0,"High",OBJ_HLINE,0,0,H_High);
ObjectSetInteger(0,"High",OBJPROP_COLOR,Aqua);
ObjectSetInteger(0,"High",OBJPROP_WIDTH,2);
ObjectSetInteger(0,"High",OBJPROP_STYLE,0);
ObjectCreate(0,"Low",OBJ_HLINE,0,0,H_Low);
ObjectSetInteger(0,"Low",OBJPROP_COLOR,Orange);
ObjectSetInteger(0,"Low",OBJPROP_WIDTH,2);
ObjectSetInteger(0,"Low",OBJPROP_STYLE,0);
}
kira-h
11-10-2017, 04:58 PM
السلام عليكم ...
الكود مع معادلة الهاي و اللو ( أظن السبب في رقم الشمعة ) ممكن نظرة لو سمحت
int FirstWeeklyBar=iBarShift(Symbol(),PERIOD_H4,iTime( Symbol(),PERIOD_W1,0),false);
double H_High=iHigh(Symbol(),PERIOD_H4,FirstWeeklyBar-1),
H_Low=iLow(Symbol(),PERIOD_H4,FirstWeeklyBar-1);
ObjectCreate(0,"High",OBJ_HLINE,0,0,H_High);
ObjectSetInteger(0,"High",OBJPROP_COLOR,Aqua);
ObjectSetInteger(0,"High",OBJPROP_WIDTH,2);
ObjectSetInteger(0,"High",OBJPROP_STYLE,0);
ObjectCreate(0,"Low",OBJ_HLINE,0,0,H_Low);
ObjectSetInteger(0,"Low",OBJPROP_COLOR,Orange);
ObjectSetInteger(0,"Low",OBJPROP_WIDTH,2);
ObjectSetInteger(0,"Low",OBJPROP_STYLE,0);
}
وعليكم السلام
كل هذا صحيح كما موضح بالصورة المرفقة
ربما يوجد لديك اختلاف في الفاصل الزمني بمنصتك، لهذا جرب حذف 1- أو زيادة 1 حتى يتحقق المطلوب
3592
kira-h
11-10-2017, 05:21 PM
أستاذ : الكود يغلق نصف العقد لكن لا ينقل الستوب على سعر الدخول ممكن مراجعة للكود لو تكرمت
تم التعديل بالمشاركة الأساسية http://www.fxprg.com/vb/showthread.php?t=31457&page=18&p=873771&viewfull=1#post873771
أبو عمر
11-10-2017, 06:11 PM
مثال بالارقام فقط
يعني تحدد طريقة الجمع والمحصلة بالاسعار الحقيقية...
لأني أجد تناقض فيما تريد
مجموح الذيول الأربعة سيكون الناتج عبارة عن إجمالي أسعار وليس 500 نقطة كما كتبت بالشروط سابقا
مجموع الذيول هو فرق أسعار مثلاً للذيل العلوي (الهاي - الكلوز) إذا كانت الشمعة رابحة وإذا خاسرة حاصل طرح (الهاي - الأوبن) .. ومثل ذلك للذيول السفلية
طبعاً والمحصلة هي نقاط وليس أسعار .. والشرط أن يتجاوز مجموع الذيول الأربعة الـ 500 نقطة
kira-h
11-10-2017, 07:48 PM
مجموع الذيول هو فرق أسعار مثلاً للذيل العلوي (الهاي - الكلوز) إذا كانت الشمعة رابحة وإذا خاسرة حاصل طرح (الهاي - الأوبن) .. ومثل ذلك للذيول السفلية
طبعاً والمحصلة هي نقاط وليس أسعار .. والشرط أن يتجاوز مجموع الذيول الأربعة الـ 500 نقطة
الشرط كالتالي :
double dn1,up1,dn2,up2,dn3,up3,dn4,up4,UP,DN;
if(Close[1]>Open[1])dn1=Open[1];up1=Close[1];
if(Close[1]<Open[1])dn1=Close[1];up1=Open[1];
if(Close[2]>Open[2])dn2=Open[2];up2=Close[2];
if(Close[2]<Open[2])dn2=Close[2];up2=Open[2];
if(Close[3]>Open[3])dn3=Open[3];up3=Close[3];
if(Close[3]<Open[3])dn3=Close[3];up3=Open[3];
if(Close[4]>Open[4])dn4=Open[4];up4=Close[4];
if(Close[4]<Open[4])dn4=Close[4];up4=Open[4];
UP=High[1]-up1+High[2]-up2+High[3]-up3+High[4]-up4;//إجمالي فرق الذيول العلوية
DN=dn1-Low[1]+dn2-Low[2]+dn3-Low[3]+dn4-Low[4];//إجمالي فرق الذيول السفلية
if((UP+DN)>500*point)//الشرط
أبو عمر
12-10-2017, 05:20 PM
الشرط كالتالي :
double dn1,up1,dn2,up2,dn3,up3,dn4,up4,UP,DN;
if(Close[1]>Open[1])dn1=Open[1];up1=Close[1];
if(Close[1]<Open[1])dn1=Close[1];up1=Open[1];
if(Close[2]>Open[2])dn2=Open[2];up2=Close[2];
if(Close[2]<Open[2])dn2=Close[2];up2=Open[2];
if(Close[3]>Open[3])dn3=Open[3];up3=Close[3];
if(Close[3]<Open[3])dn3=Close[3];up3=Open[3];
if(Close[4]>Open[4])dn4=Open[4];up4=Close[4];
if(Close[4]<Open[4])dn4=Close[4];up4=Open[4];
UP=High[1]-up1+High[2]-up2+High[3]-up3+High[4]-up4;//إجمالي فرق الذيول العلوية
DN=dn1-Low[1]+dn2-Low[2]+dn3-Low[3]+dn4-Low[4];//إجمالي فرق الذيول السفلية
if((UP+DN)>500*point)//الشرط
الأخ الغالي حسن
جزاك الله خير على كل ما تقدمه ... الذي أرستله تمام التمام ولا غبار عليه .. كذلك الكود السابق لا غبار عليه كلها صحيحة وهو ما أريده
لكن الذي يحصل معي (وقد أخبرتك من البداية ) هو أنه يفتح الصفقة قبل تحقق الشرط بمعنى أنه قد يكون مجموع ذيول الشمعات الأربعة أقل من المطلوب(مثلاً 500 نقطة) ويفتح صفقة !
هذا الذي يحصل معي أرجو منك التكرم وتجريب هذا الكود عندك لترى صحة كلامي
في المرفق .. فتح صفقة ومجموع ذيول الأربع شمعات أقل من 1000 نقطة وأنا وضعته في الشرط أن يتجاوز الألف نقطة !!!
mr.forex
13-10-2017, 03:23 AM
السلام عليكم أستاذ حسن
أتمنى منك شرحا نظريا للأنواع الثلاثة للتريلينج ستوب بالأسفل
حاولت والله وبحثت عن اجابات في قوقل بس للأسف لم أتوصل لأي إجابة
اتمنى ايضاحها جزاك الله خير
Trailing Mode - trailing stop mode
Adaptive by Time - time adaptive
Adaptive by Volatility - volatility adaptive
Adaptive by Volume - volume adaptive
sal_moh85
13-10-2017, 12:38 PM
وعليكم السلام
هذا ما يقوم به الكود السابق، فلا تتغير قيمة التريلينغ من 1 إلى 2 إلا بعد تفعيل وظيفة تعديل سعر الأمر المعلق
سلام عليكم اخ حسن مشكور جدا بدك تعذرني ماحسنت رد عليك كنت مسافر
فكرة الكود يلي حضرتك كاتبه تبع ترينغ 1 وترينيغ 2 انو بس ما يتحرك امر المعلق بيعدل ترينيغ الى 2 بس انا مو هاد يلي بدي ياه
مثال لي توضيح الفكره اكثر عندي صفقتين باي ستوب وسيل ستوب ترينغ ستوب 6 نقاط تحرك اي امر منهم على سبيل المثال تحرك امر باي ستوب هونا تتغير قيمة الترينغ ستوب الى 20 نقطه ويبقى ترينغ ستوب 6 نقاط لي صفقه التي لم تتحرك وهي سيل ستوب وشكرا
في الكود الذي اعطيتني اياه
عند عدم تحرك الصفقات الترينغ ستوب افتراضي وعند تحرك اي صفقه يصبح ترينغ ستوب جديد لي صفقتين المتحركه وغير المتحرك انا لا اريد ذالك اريد فصل ترينغ الستوب عن صفقتيني المتحركه ترينغ ستوب جديد وغير المتحركه ترينغ ستوب افتراضي
kira-h
14-10-2017, 05:07 PM
الأخ الغالي حسن
جزاك الله خير على كل ما تقدمه ... الذي أرستله تمام التمام ولا غبار عليه .. كذلك الكود السابق لا غبار عليه كلها صحيحة وهو ما أريده
لكن الذي يحصل معي (وقد أخبرتك من البداية ) هو أنه يفتح الصفقة قبل تحقق الشرط بمعنى أنه قد يكون مجموع ذيول الشمعات الأربعة أقل من المطلوب(مثلاً 500 نقطة) ويفتح صفقة !
هذا الذي يحصل معي أرجو منك التكرم وتجريب هذا الكود عندك لترى صحة كلامي
في المرفق .. فتح صفقة ومجموع ذيول الأربع شمعات أقل من 1000 نقطة وأنا وضعته في الشرط أن يتجاوز الألف نقطة !!!
ارفق الاكسبيرت الذي قمت بعمله للمراجعة
kira-h
14-10-2017, 05:19 PM
السلام عليكم أستاذ حسن
أتمنى منك شرحا نظريا للأنواع الثلاثة للتريلينج ستوب بالأسفل
حاولت والله وبحثت عن اجابات في قوقل بس للأسف لم أتوصل لأي إجابة
اتمنى ايضاحها جزاك الله خير
Trailing Mode - trailing stop mode
Adaptive by Time - time adaptive
Adaptive by Volatility - volatility adaptive
Adaptive by Volume - volume adaptive
وعليكم السلام
معاني الأسماء
نوع الترلينغ ستوب
Time - الزمن
Volatility - التقلب
Volume - الحجم
sal_moh85
14-10-2017, 05:57 PM
افتراضي
اقتباس المشاركة الأصلية كتبت بواسطة kira-h مشاهدة المشاركة
وعليكم السلام
هذا ما يقوم به الكود السابق، فلا تتغير قيمة التريلينغ من 1 إلى 2 إلا بعد تفعيل وظيفة تعديل سعر الأمر المعلق
سلام عليكم اخ حسن مشكور جدا بدك تعذرني ماحسنت رد عليك كنت مسافر
فكرة الكود يلي حضرتك كاتبه تبع ترينغ 1 وترينيغ 2 انو بس ما يتحرك امر المعلق بيعدل ترينيغ الى 2 بس انا مو هاد يلي بدي ياه
مثال لي توضيح الفكره اكثر عندي صفقتين باي ستوب وسيل ستوب ترينغ ستوب 6 نقاط تحرك اي امر منهم على سبيل المثال تحرك امر باي ستوب هونا تتغير قيمة الترينغ ستوب الى 20 نقطه ويبقى ترينغ ستوب 6 نقاط لي صفقه التي لم تتحرك وهي سيل ستوب وشكرا
في الكود الذي اعطيتني اياه
عند عدم تحرك الصفقات الترينغ ستوب افتراضي وعند تحرك اي صفقه يصبح ترينغ ستوب جديد لي صفقتين المتحركه وغير المتحرك انا لا اريد ذالك اريد فصل ترينغ الستوب عن صفقتيني المتحركه ترينغ ستوب جديد وغير المتحركه ترينغ ستوب افتراضي
kira-h
14-10-2017, 06:13 PM
سلام عليكم اخ حسن مشكور جدا بدك تعذرني ماحسنت رد عليك كنت مسافر
فكرة الكود يلي حضرتك كاتبه تبع ترينغ 1 وترينيغ 2 انو بس ما يتحرك امر المعلق بيعدل ترينيغ الى 2 بس انا مو هاد يلي بدي ياه
مثال لي توضيح الفكره اكثر عندي صفقتين باي ستوب وسيل ستوب ترينغ ستوب 6 نقاط تحرك اي امر منهم على سبيل المثال تحرك امر باي ستوب هونا تتغير قيمة الترينغ ستوب الى 20 نقطه ويبقى ترينغ ستوب 6 نقاط لي صفقه التي لم تتحرك وهي سيل ستوب وشكرا
في الكود الذي اعطيتني اياه
عند عدم تحرك الصفقات الترينغ ستوب افتراضي وعند تحرك اي صفقه يصبح ترينغ ستوب جديد لي صفقتين المتحركه وغير المتحرك انا لا اريد ذالك اريد فصل ترينغ الستوب عن صفقتيني المتحركه ترينغ ستوب جديد وغير المتحركه ترينغ ستوب افتراضي
وعليكم السلام
ستقوم بعمل شروط الشراء منفصلة عن شروط البيع
مثال :
لدينا المتغير الخارجي للتريلينغ ستوب كالتالي :
input double TralingStop1=15;
input double TralingStop2=20;
ثم بالدالة الرئيسية OnInit نضع الشرط التالي :
int init()
{
GlobalVariableSet(Symbol()+magic+"SS",TrailingStop1);
GlobalVariableSet(Symbol()+magic+"BS",TrailingStop1);
}
لحفظ قيمة التريلنغ الأول للشراء وللبيع عند بداية عمل الاكسبيرت
ثم نضع دالة التريلينغ بدلالة قيمة الترلينغ ونوع الصفقة:
مثال :
void MoveTrailingStop(double Trail,int type)
{
bool s,mod;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
if(sy==Symbol()&&mn==magic&&ot==type)
{
if(ot==OP_BUY)
{
if(NormalizeDouble(Ask,Digits)>NormalizeDouble((op+(Trail*point)),Digits))
{
if((NormalizeDouble(sl,Digits)<NormalizeDouble(Bid-(Trail*point),Digits))||(sl==0))
{
mod=OrderModify(tk,op,NormalizeDouble(Bid-(Trail*point),Digits),tp,0,Blue);
}
}
}
else
{
if(NormalizeDouble(Bid,Digits)<NormalizeDouble((op-(Trail*point)),Digits))
{
if((NormalizeDouble(sl,Digits)>(NormalizeDouble(Ask+(Trail*point),Digits)))||(sl= =0))
{
mod=OrderModify(tk,op,NormalizeDouble(Ask+(Trail*p oint),Digits),tp,0,Red);
}
}
}
}
}
}
ونعدل على دالة تعديل الامر المعلق بحيث عند تفعيل التعديل يتم تعديل كذلك القيمة المخزنة بدالة الجلوبال بتخزين قيمة الترلينغ الثاني للبيع المعلق والشراء المعلق:
void pandingTringsell()
{
for(int ii=0;ii<OrdersTotal();ii++)
{
if(OrderSelect(ii,SELECT_BY_POS,MODE_TRADES))
double op=OrderOpenPrice();
double ppoint=MarketInfo(OrderSymbol(), MODE_POINT);
double pBid=MarketInfo(OrderSymbol(), MODE_BID);
double pAsk=MarketInfo(OrderSymbol(), MODE_ASK);
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magic)
{
if(OrderType()==OP_SELLSTOP)
{
double prs=pBid-(50*Point);
double sts=300*10;
double tls=300*10;
double sls=prs+sts*Point;
double tps=prs-tls*Point;
if(pBid-50*Point>op)
{
bool sell= OrderModify(OrderTicket(),prs,sls,tps,0,Red);
GlobalVariableSet(Symbol()+magic+"SS",TrailingStop2);
}
}
if(OrderType()==OP_BUYSTOP)
{
double prb=pAsk+(50*Point);
double stb=300*10;
double tlb=300*10;
double slb=prb-stb*Point;
double tpb=prb+tlb*Point;
if(pAsk+50*Point<op)
{
bool buy= OrderModify(OrderTicket(),prb,slb,tpb,0,Blue);
GlobalVariableSet(Symbol()+magic+"BS",TrailingStop2);
}
}
}
}
}
}
ثم نضع شروط الترلينغ بالدالة الرئيسية OnTick حيت يعمل الترلينغ ستوب بناءا على قيمة الترلينغ المخزنة بالجلوبال كالتالي :
void OnTick()
{
double trailingstopb=GlobalVariableGet(Symbol()+magic+"BS");
double trailingstops=GlobalVariableGet(Symbol()+magic+"SS");
if(trailingstop>0){MoveTrailingStop(trailingstopb,OP_BUY);MoveTrai lingStop(trailingstops,OP_SELL);}
}
sal_moh85
14-10-2017, 06:35 PM
مشكور جدا اخ حسن
بس كانو هون في شرط غير منطقي
void OnTick()
{
double trailingstopb=GlobalVariableGet(Symbol()+magic+"bS");
double trailingstops=GlobalVariableGet(Symbol()+magic+"SS");
if(trailingstop>0){MoveTrailingStop(trailingstopb,OP_BUY);MoveTrai lingStop(trailingstops,OP_SELL);}
}
لانو اذا بدي ساوي جمله شرطيه
if(trailingstop>0) هي جمله مو معرفه في اكسبريت
sal_moh85
14-10-2017, 07:34 PM
مشكور جدا اخ حسن خالص كل امور تمام
mr.forex
14-10-2017, 10:34 PM
وعليكم السلام
معاني الأسماء
نوع الترلينغ ستوب
Time - الزمن
Volatility - التقلب
Volume - الحجم
شكرا لك أستاذ حسن الله يعطيك العافية
ولكن أنا لا أقصد ترجمة المعنى
أنا أقصد بيان كيفية وآلية عمل كل واحدة منها
مثلا النوع الأول كيف يعمل التريلينج ستوب بواسطة الزمن ؟
ما هي الفكرة ؟ متى يتحرك التريلينج ومتى يتوقف ؟
وهكذا بالنسبة للنوعين الآخرين
بارك الله فيك ونفع بك
Waddah
15-10-2017, 02:05 PM
السلام عليكم أستاذ
بالنسبة لملفات الإعدادات (التي نوعها set)
1- هل يستدعيها الإكسبرت بمفرده أم هناك تعليمة لاستدعائها يجب إضافتها للكود ؟؟
2- إكسبرت يعمل على عدة أزواج كيف يتعامل مع هذه الملفات (علماً أنه لكل زوج ملف set خاص )؟؟؟
مع جزيل الشكر
أبو عمر
15-10-2017, 03:22 PM
ارفق الاكسبيرت الذي قمت بعمله للمراجعة
ملاحظة : هيكل الإكسبيرت لا علاقة له بالمطلوب والشرط وحيد لا يوجد غيره وفقط للشراء .. للعلم
يعني أنه لا يفتح أي صفقة إلا بالشرط الوحيد وهو مجموع ذيول الشمعات الأربعة أكبر من قيمة معينة ستجد أنه لا يعمل يعني يفتح صفقة دون تحقق الشرط
كل الخرابيش التي في الإكسبيرت إما معطلة أو لا علاقة لها بالشرط
فقط أريدك أن تعمل باكتيست قصير لترى ذلك
#define BEErr "Check BreakEven level, BreakEven should be greater than BreakEvenValue."
//input ENUM_TIMEFRAMES timeframe=PERIOD_M1;
extern double Stoploss=50;
extern double Takeprofit=100;
input int MagicNumber=1;
input int MaxTrades=1;
extern double BreakEven=50; //BreakEven
extern double BreakEvenValue=20; //BreakEvenValue
extern int Spread=20;
input double Lots=1;
input double D=1.1;
extern int Slippage=30;
input double RiskPercent=100;
double dn1,up1,dn2,up2,dn3,up3,dn4,up4,UP,DN;
input string AntiSwap;
input int Hour=21;
input int Minute=59;
double MyPoint=Point;
//int Q;
int C=0;
datetime time1;
int Lot_Decimal;
double NewLots;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int OnInit()
{
if(Digits==3 || Digits==5) MyPoint=Point*10;
if(Stoploss<0)Stoploss=Stoploss*(-1);
if(Takeprofit<0)Takeprofit=Takeprofit*(-1);
if(Slippage<0)Slippage=Slippage*(-1);
//if(Spread<0)Spread=Spread*(-1);
if(BreakEven<0)BreakEven=BreakEven*(-1);
if(BreakEvenValue<0)BreakEvenValue=BreakEvenValue*(-1);
if(BreakEven<BreakEvenValue){Comment(BEErr);Alert(BEErr);}
//Stoploss=SetValueX10(Stoploss);
//Takeprofit=SetValueX10(Takeprofit);
//BreakEvenSta=SetValueX10(BreakEven);
//BreakEvenPips=SetValueX10(BreakEvenPips);
//Spread=SetValueX10(Spread);
//Slippage=SetValueX10(Slippage);
Lot_Decimal=0;
if(MarketInfo(Symbol(),MODE_MINLOT)<1) Lot_Decimal=1;
if(MarketInfo(Symbol(),MODE_MINLOT)<0.1) Lot_Decimal=2;
return(INIT_SUCCEEDED);
}
/*/+------------------------------------------------------------------+
//| رƒذ¼ذ½ذ¾ذ¶ذ¸ذ¼ ذ·ذ½ذ°ر‡ذµذ½ذ¸ذµ ذ½ذ° 10 ذ´ذ»رڈ 5-ذ·ذ½ذ°ر‡ذ½ر‹ر… ذ؛ذ¾ر‚ذ¸ر€ذ¾ذ²ذ¾ذ؛ |
//+------------------------------------------------------------------+
int SetValueX10(double Value)
{
if(Point==0.0001 || Point==0.01) Value=Value/10;
return (int(MathRound(Value)));
}
*/
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double LotManage()
{
double lot=MathCeil(AccountFreeMargin()*RiskPercent/1000)/100;
if(lot<MarketInfo(Symbol(),MODE_MINLOT))lot=MarketInfo(Sy mbol(),MODE_MINLOT);
if(lot>MarketInfo(Symbol(),MODE_MAXLOT))lot=MarketInfo(Sy mbol(),MODE_MAXLOT);
return(NormalizeDouble(lot,Lot_Decimal));
}
//++++++++++++++++++++++++++++++++
//-----------Count current Orders
int Orderscnt(string com,int type)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderComment()==com)
{
if(OrderType()==type)
{
cnt++;
}
}
}
}
return(cnt);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void BuyOrder(string com) //Buy function
{
double Min_Lot = MarketInfo(Symbol(),MODE_MINLOT); // ذœذ¸ذ½ذ¸ذ¼ذ°ذ»رŒذ½ذ¾ذµ ذ؛ذ¾ذ»ذ¸ر‡ذµرپر‚ذ²ذ¾ ذ»ذ¾ر‚ذ¾ذ²
double Max_Lot = MarketInfo(Symbol(),MODE_MAXLOT); // ذœذ°ذ؛رپذ¸ذ¼ذ°ذ»رŒذ½ذ¾ذµ ذ؛ذ¾ذ»ذ¸ر‡ذµرپر‚ذ²ذ¾ ذ»ذ¾ر‚ذ¾ذ²
if(NewLots < Min_Lot) NewLots = Min_Lot;
if(NewLots > Max_Lot) NewLots = Max_Lot;
if(AccountFreeMarginCheck(Symbol(),OP_BUY,NewLots)<=0 || GetLastError()==134)
{
Print("Not enough money to send BUY order");
return;
}
else
{
double sl = 0;
double tp = 0;
if(Stoploss>0)
{
sl = Ask - Stoploss*MyPoint;
sl = NormalizeDouble(sl,Digits);
}
if(Takeprofit>0)
{
tp = Ask + Takeprofit*MyPoint;
tp = NormalizeDouble(tp,Digits);
}
if(CheckStopLoss_Takeprofit(OP_BUY,sl,tp))
int Ticket=OrderSend(Symbol(),OP_BUY,NewLots,Ask,Slipp age,sl,tp,com,MagicNumber,0,clrBlue);
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void SellOrder(string com) //Sell function
{
double Min_Lot = MarketInfo(Symbol(),MODE_MINLOT); // ذœذ¸ذ½ذ¸ذ¼ذ°ذ»رŒذ½ذ¾ذµ ذ؛ذ¾ذ»ذ¸ر‡ذµرپر‚ذ²ذ¾ ذ»ذ¾ر‚ذ¾ذ²
double Max_Lot = MarketInfo(Symbol(),MODE_MAXLOT); // ذœذ°ذ؛رپذ¸ذ¼ذ°ذ»رŒذ½ذ¾ذµ ذ؛ذ¾ذ»ذ¸ر‡ذµرپر‚ذ²ذ¾ ذ»ذ¾ر‚ذ¾ذ²
if(NewLots < Min_Lot) NewLots = Min_Lot;
if(NewLots > Max_Lot) NewLots = Max_Lot;
if(AccountFreeMarginCheck(Symbol(),OP_SELL,NewLots )<=0 || GetLastError()==134)
{
Print("Not enough money to send SELL order");
return;
}
else
{
double sl = 0;
double tp = 0;
if(Stoploss>0)
{
sl = Bid + Stoploss*MyPoint;
sl = NormalizeDouble(sl,Digits);
}
if(Takeprofit>0)
{
tp = Bid - Takeprofit*MyPoint;
tp = NormalizeDouble(tp,Digits);
}
if(CheckStopLoss_Takeprofit(OP_SELL,sl,tp))
int Ticket=OrderSend(Symbol(),OP_SELL,NewLots,Bid,Slip page,sl,tp,com,MagicNumber,0,Red);
}
}
/*/+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void MoveBreakEven()
{
bool s,mod;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=0,sl=0,tp=0;
op=OrderOpenPrice();
sl=OrderStopLoss();
tp=OrderTakeProfit();
if(ot<=OP_SELL && sy==Symbol() && mn==MagicNumber)
{
if(ot==OP_BUY)
{
if(BreakEven>0)
{
if(NormalizeDouble((Bid-op),Digits)>BreakEven*Point)
{
if((NormalizeDouble((sl-op),Digits)<0) || (sl==0))
{
if(Check_OrderModify(tk,op,sl,tp))
mod=OrderModify(tk,op,NormalizeDouble(op+BreakEven Pips*Point,Digits),tp,0,Blue);
if(GetLastError()!=0) continue;
}
}
}
}
else if(ot==OP_SELL)
{
if(BreakEven>0)
{
if(NormalizeDouble((op-Ask),Digits)>BreakEven*Point)
{
if((NormalizeDouble((op-sl),Digits)<0) || (sl==0))
{
if(Check_OrderModify(tk,op,sl,tp))
mod=OrderModify(tk,op,NormalizeDouble(op-BreakEvenPips*Point,Digits),tp,0,Red);
if(GetLastError()!=0) continue;
}
}
}
}
}
}
}
*/
//+------------------------------------------------------------------+
//| Expert BreakEven function
//+------------------------------------------------------------------+
void BreakEven()
{
double Deff=0;
double NewStopLoss=0;
RefreshRates();
for(int i=OrdersTotal(); i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderType()==OP_BUY
&& OrderSymbol()==Symbol()
&& OrderMagicNumber()==MagicNumber
&& OrderStopLoss()<OrderOpenPrice())
{
Deff=OrderOpenPrice()+BreakEven*MyPoint;
if(OrderClosePrice()>=Deff)
{
NewStopLoss=OrderOpenPrice()+(BreakEvenValue*MyPoi nt);
bool ModifyBuy=true;
ModifyBuy=OrderModify(OrderTicket(),
OrderOpenPrice(),
NewStopLoss,
OrderTakeProfit(),
0,
clrYellow);
//---
if(ModifyBuy==false) Print("Error With Buy Modification, #",(GetLastError()));
else if(ModifyBuy==true) Print("Buy Order Has Modified Successfuly.");
}
}
else if(OrderType()==OP_SELL
&& OrderSymbol()==Symbol()
&& OrderMagicNumber()==MagicNumber
&& (OrderStopLoss()>OrderOpenPrice() || OrderStopLoss()==0))
{
Deff=OrderOpenPrice()-BreakEven*MyPoint;
if(OrderClosePrice()<=Deff)
{
NewStopLoss=OrderOpenPrice()-(BreakEvenValue*MyPoint);
bool ModifySell=true;
ModifySell=OrderModify(OrderTicket(),
OrderOpenPrice(),
NewStopLoss,
OrderTakeProfit(),
0,
clrYellow);
//---
if(ModifySell==false) Print("Error With Sell Modification, #",(GetLastError()));
else if(ModifySell==true) Print("Sell Order Has Modified Successfuly.");
}
}
}
}
}
//+------------------------------------------------------------------+
//| Check StopLoss Takeprofit
//+------------------------------------------------------------------+
bool CheckStopLoss_Takeprofit(ENUM_ORDER_TYPE type,double SL,double TP)
{
//--- get the SYMBOL_TRADE_STOPS_LEVEL level
int stops_level=(int)SymbolInfoInteger(_Symbol,SYMBOL_ TRADE_STOPS_LEVEL);
if(stops_level!=0)
{
PrintFormat("SYMBOL_TRADE_STOPS_LEVEL=%d: StopLoss and TakeProfit must"+
" not be nearer than %d points from the closing price",stops_level,stops_level);
}
//---
bool SL_check=false,TP_check=false;
//--- check only two order types
switch(type)
{
//--- Buy operation
case ORDER_TYPE_BUY:
{
//--- check the StopLoss
SL_check=(Bid-SL>stops_level*_Point);
if(!SL_check)
PrintFormat("For order %s StopLoss=%.5f must be less than %.5f"+
" (Bid=%.5f - SYMBOL_TRADE_STOPS_LEVEL=%d points)",
EnumToString(type),SL,Bid-stops_level*_Point,Bid,stops_level);
//--- check the TakeProfit
TP_check=(TP-Bid>stops_level*_Point);
if(!TP_check)
PrintFormat("For order %s TakeProfit=%.5f must be greater than %.5f"+
" (Bid=%.5f + SYMBOL_TRADE_STOPS_LEVEL=%d points)",
EnumToString(type),TP,Bid+stops_level*_Point,Bid,s tops_level);
//--- return the result of checking
return(SL_check&&TP_check);
}
//--- Sell operation
case ORDER_TYPE_SELL:
{
//--- check the StopLoss
SL_check=(SL-Ask>stops_level*_Point);
if(!SL_check)
PrintFormat("For order %s StopLoss=%.5f must be greater than %.5f "+
" (Ask=%.5f + SYMBOL_TRADE_STOPS_LEVEL=%d points)",
EnumToString(type),SL,Ask+stops_level*_Point,Ask,s tops_level);
//--- check the TakeProfit
TP_check=(Ask-TP>stops_level*_Point);
if(!TP_check)
PrintFormat("For order %s TakeProfit=%.5f must be less than %.5f "+
" (Ask=%.5f - SYMBOL_TRADE_STOPS_LEVEL=%d points)",
EnumToString(type),TP,Ask-stops_level*_Point,Ask,stops_level);
//--- return the result of checking
return(TP_check&&SL_check);
}
break;
}
//--- a slightly different function is required for pending orders
return false;
}
//+------------------------------------------------------------------+
//| Check Order Modif
//+------------------------------------------------------------------+
bool OrderModifyCheck(int ticket,double price,double sl,double tp)
{
//--- select order by ticket
if(OrderSelect(ticket,SELECT_BY_TICKET))
{
//--- point size and name of the symbol, for which a pending order was placed
string symbol=OrderSymbol();
double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
//--- check if there are changes in the Open price
bool PriceOpenChanged=true;
int type=OrderType();
if(!(type==OP_BUY || type==OP_SELL))
{
PriceOpenChanged=(MathAbs(OrderOpenPrice()-price)>point);
}
//--- check if there are changes in the StopLoss level
bool StopLossChanged=(MathAbs(OrderStopLoss()-sl)>point);
//--- check if there are changes in the Takeprofit level
bool TakeProfitChanged=(MathAbs(OrderTakeProfit()-sl)>tp);
//--- if there are any changes in levels
if(PriceOpenChanged || StopLossChanged || TakeProfitChanged)
return(true); // order can be modified
//--- there are no changes in the Open, StopLoss and Takeprofit levels
else
//--- notify about the error
PrintFormat("Order #%d already has levels of Open=%.5f SL=.5f TP=%.5f",
ticket,OrderOpenPrice(),OrderStopLoss(),OrderTakeP rofit());
}
//--- came to the end, no changes for the order
return(false); // no point in modifying
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CloseDeleteOrders(int type=-1)
{
bool s,c;
for(int i=OrdersTotal()-1;i>=0;i--)
{
s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tt=OrdersTotal(),
tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots();
if(tt>0 && sy==Symbol() && mn==MagicNumber)
{
if(ot==type || type==-1)
{
if(ot==OP_BUY){c=OrderClose(tk,lo,NormalizeDouble( Bid,Digits),50);}
if(ot==OP_SELL){c=OrderClose(tk,lo,NormalizeDouble (Ask,Digits),50);}
if(ot>OP_SELL){c=OrderDelete(tk);}
}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnTick()
{
if(Close[1]>Open[1])dn1=Open[1];up1=Close[1];
if(Close[1]<Open[1])dn1=Close[1];up1=Open[1];
if(Close[2]>Open[2])dn2=Open[2];up2=Close[2];
if(Close[2]<Open[2])dn2=Close[2];up2=Open[2];
if(Close[3]>Open[3])dn3=Open[3];up3=Close[3];
if(Close[3]<Open[3])dn3=Close[3];up3=Open[3];
if(Close[4]>Open[4])dn4=Open[4];up4=Close[4];
if(Close[4]<Open[4])dn4=Close[4];up4=Open[4];
UP=High[1]-up1+High[2]-up2+High[3]-up3+High[4]-up4;
DN=dn1-Low[1]+dn2-Low[2]+dn3-Low[3]+dn4-Low[4];
if(RiskPercent>0) NewLots=NormalizeDouble(LotManage(),Lot_Decimal);
else NewLots=Lots;
//if(TimeCurrent()>=StrToTime("23:50.00")&&TimeCurrent()<=StrToTime("06:50.00"))return;
double bu=iBands(Symbol(),0,20,2,0,0,MODE_UPPER,1);
double bl=iBands(Symbol(),0,20,2,0,0,MODE_LOWER,1);
double bu2=iBands(Symbol(),0,20,2,0,0,MODE_UPPER,2);
double bl2=iBands(Symbol(),0,20,2,0,0,MODE_LOWER,2);
//الشروط
//if(_Digits==5 || _Digits==3) Q=10;else Q=1;
//string comment=DoubleToStr(MarketInfo(Symbol(),MODE_SPREA D)/Q,1);
if(Day()>1&&Month()>=1&&Year()>=2021){C=1;}
// if(TimeHour(TimeCurrent())==Hour && TimeMinute(TimeCurrent())==Minute)CloseDeleteOrder s();
if((Orderscnt("MMS",OP_BUY)>0 || Orderscnt("MMS",OP_SELL)>0) && BreakEven>0 && BreakEvenValue>0 && BreakEvenValue<BreakEven)
BreakEven();
if(Orderscnt("MMS",OP_BUY)<MaxTrades
// &&Ask-Bid<(Spread+1)*Point
//&&Open[10]-Ask>30*D*MyPoint
//&&(Close[C]+Open[C])/2-Low[C]>2.5*(High[C]-(Close[C]+Open[C])/2)
//&&Ask-Low[0]>High[1]-Low[1]
//&&Low[0]<bl // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Conditions
//&&Ask-Low[0]>1.5*MathAbs(Close[1]-Open[1])
&&(UP+DN)>1000*Point
&& time1!=iTime(Symbol(),PERIOD_H1,0)){BuyOrder("MMS");time1=iTime(Symbol(),PERIOD_H1,0);}
//if(Orderscnt("MMS",OP_SELL)<MaxTrades
//&&Ask-Bid<(Spread+1)*Point
//&&Bid-Open[10]>30*D*MyPoint
//&&(Close[C]+Open[C])/2-Low[C]<0.4*(High[C]-(Close[C]+Open[C])/2)
//&&High[0]-Bid>High[1]-Low[1]
//&&High[0]>bu// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Conditions
//&&up1>300*Point
// && time1!=iTime(Symbol(),PERIOD_H1,0)){SellOrder("MMS");time1=iTime(Symbol(),PERIOD_H1,0);}
}
//+------------------------------------------------------------------+
kira-h
15-10-2017, 05:14 PM
السلام عليكم أستاذ
بالنسبة لملفات الإعدادات (التي نوعها set)
1- هل يستدعيها الإكسبرت بمفرده أم هناك تعليمة لاستدعائها يجب إضافتها للكود ؟؟
2- إكسبرت يعمل على عدة أزواج كيف يتعامل مع هذه الملفات (علماً أنه لكل زوج ملف set خاص )؟؟؟
مع جزيل الشكر
وعليكم السلام
يمكنك استدعاء تمبلت جاهز به الاكسبيرت باعداداته الخاصة، وذلك من خلال الوظيفة ChartApplyTemplate بالدالة الرئيسية OnInit
مثال اسم التمبلت MyEA
سيكون الاستدعاء كالتالي :
int OnInit()
{
ChartApplyTemplate(0,"MyEA.tpl");
}
أما استخدام ملف الاعدادات بيتم من خلال كليك على Load ثم تبحث عن مكان الاعدادات
3653
kira-h
15-10-2017, 05:46 PM
ملاحظة : هيكل الإكسبيرت لا علاقة له بالمطلوب والشرط وحيد لا يوجد غيره وفقط للشراء .. للعلم
يعني أنه لا يفتح أي صفقة إلا بالشرط الوحيد وهو مجموع ذيول الشمعات الأربعة أكبر من قيمة معينة ستجد أنه لا يعمل يعني يفتح صفقة دون تحقق الشرط
كل الخرابيش التي في الإكسبيرت إما معطلة أو لا علاقة لها بالشرط
فقط أريدك أن تعمل باكتيست قصير لترى ذلك
...
الشرط سليم يعني تحقق 100 نقطة بالمنصة الخماسية وليس 1000 لأنك استخدمت الوظيفة Point
kira-h
15-10-2017, 05:56 PM
شكرا لك أستاذ حسن الله يعطيك العافية
ولكن أنا لا أقصد ترجمة المعنى
أنا أقصد بيان كيفية وآلية عمل كل واحدة منها
مثلا النوع الأول كيف يعمل التريلينج ستوب بواسطة الزمن ؟
ما هي الفكرة ؟ متى يتحرك التريلينج ومتى يتوقف ؟
وهكذا بالنسبة للنوعين الآخرين
بارك الله فيك ونفع بك
وإياك أخي الكريم
ارفق الاكسبيرت مفتوح الكود أصلي لمعرفة ذلك، لأننا لا نعلم كيف قام المبرمج بتوظيفها،
kira-h
15-10-2017, 05:58 PM
مشكور جدا اخ حسن خالص كل امور تمام
بالتوفيق إن شاء الله
أبو عمر
15-10-2017, 09:58 PM
الشرط سليم يعني تحقق 100 نقطة بالمنصة الخماسية وليس 1000 لأنك استخدمت الوظيفة Point
بالعكس 1000 نقطة على المنصة الخماسية
و 100 نقطة على الرباعية
والـ Point هي أصغر وحدة سعرية للزوج الحالي وبالتالي الألف على الخماسية هي مئة على الرباعية
وكل ما سبق لا علاقة له بالمشكلة لا من قريب ولا من بعيد
نعم الشرط سليم 100% والكود سليم 200%
ولكن إلى الآن لم تفهم علي مع الأسف
المشكلة :
أريدك فقط تجريب الكود الذي أعطيتني إياه بالشرط الوحيد السابق ( أو بأي شرط بسيط يكشف المشكلة عندك)
مثلاً يفتح صفقة شراء إذا تجاوز مجموع الذيول 100 نقطة (pip) على المنصة الرباعية
أو ...................................... 1000 نقطة (Point) على المنصة الخماسية
المشكلة التي تحصل أنه يفتح صفقة قبل وصول مجموع الذيول إلى مثلاً (1000) نقطة على المنصة الخماسية ((100 نقطة على الرباعية))
kira-h
16-10-2017, 12:32 AM
بالعكس 1000 نقطة على المنصة الخماسية
و 100 نقطة على الرباعية
والـ Point هي أصغر وحدة سعرية للزوج الحالي وبالتالي الألف على الخماسية هي مئة على الرباعية
وكل ما سبق لا علاقة له بالمشكلة لا من قريب ولا من بعيد
نعم الشرط سليم 100% والكود سليم 200%
ولكن إلى الآن لم تفهم علي مع الأسف
المشكلة :
أريدك فقط تجريب الكود الذي أعطيتني إياه بالشرط الوحيد السابق ( أو بأي شرط بسيط يكشف المشكلة عندك)
مثلاً يفتح صفقة شراء إذا تجاوز مجموع الذيول 100 نقطة (pip) على المنصة الرباعية
أو ...................................... 1000 نقطة (Point) على المنصة الخماسية
المشكلة التي تحصل أنه يفتح صفقة قبل وصول مجموع الذيول إلى مثلاً (1000) نقطة على المنصة الخماسية ((100 نقطة على الرباعية))
أخي الكريم، لا أحتاج إلى التجربة فالكود سليم
ولكن فقط لديك فهم خاطئ لقيمة النقطة
1000 ضرب الوظيفة Point يعني 100 نقطة بالمنصة الخماسية وألف نقطة بالمنصة الرباعية
وبما أنك متأكد بان الكود سليم 100%، فيمكنك الاستنتاج بالمنطق والعقل مصدر الخطأ
mr.forex
16-10-2017, 03:10 PM
وإياك أخي الكريم
ارفق الاكسبيرت مفتوح الكود أصلي لمعرفة ذلك، لأننا لا نعلم كيف قام المبرمج بتوظيفها،
للأسف أستاذ حسن أنا أيضا لا أملك الاكسبيرت مفتوح الكود
أنا أخذت الأسماء المذكورة من موضوع قديم في منتدى مجاور وهناك لم يتم الايضاح ماذا تعني هذه الأسماء للأسف
على العموم شكرا لك أستاذ حسن الله يوفقك ويخليك لنا جميعا
Aminox
17-10-2017, 08:06 PM
مرحبا أخي حسن
قمت ببرمجة إكسبيرت على شموع الرينكو
عندما يكون الإتجاه صاعد شمعة خضراء ثم خضراء وهكذا
إلى ظهور شمعة حمراء يقوم بفتح صفقة بيع الإغلاق عند إغلاق الشمعة الموالية
وهو مرتبط بعدد النقاط المخصصة لشمعة الرينكو مثلا أنا أضع 20 نقة للشمعة
إذن التيك 20 نقطة وهي إغلاق الشمعة و الستوب أضع 60 نقطة .....
وهكذا ينتظر الشمعة الحمراء ثم الحمراء ثم الحمراء إلى ظهور شمعة خضراء
فيقوم بفتح صفقة شراء أيضا ستوب 60 و التيك 20
لكن الإكسبيرت لا يعمل معي كما أريد الإكسبيرت في المرفقات قل لي إن كنت
غالط في شيئ ما جزاك الله خيرا الصورة للتوضيح
3697
kira-h
18-10-2017, 03:12 AM
مرحبا أخي حسن
قمت ببرمجة إكسبيرت على شموع الرينكو
عندما يكون الإتجاه صاعد شمعة خضراء ثم خضراء وهكذا
إلى ظهور شمعة حمراء يقوم بفتح صفقة بيع الإغلاق عند إغلاق الشمعة الموالية
وهو مرتبط بعدد النقاط المخصصة لشمعة الرينكو مثلا أنا أضع 20 نقة للشمعة
إذن التيك 20 نقطة وهي إغلاق الشمعة و الستوب أضع 60 نقطة .....
وهكذا ينتظر الشمعة الحمراء ثم الحمراء ثم الحمراء إلى ظهور شمعة خضراء
فيقوم بفتح صفقة شراء أيضا ستوب 60 و التيك 20
لكن الإكسبيرت لا يعمل معي كما أريد الإكسبيرت في المرفقات قل لي إن كنت
غالط في شيئ ما جزاك الله خيرا الصورة للتوضيح
3697
السلام عليكم
تم تصحيح اخطاء تقنية مع إضافة شرط عدم تكرار الصفقة وشرط فتح الصفقة لحظة الاغلاق
بالنسخة المرفقة
Waddah
18-10-2017, 04:40 PM
السلام عليكم أستاذ
هل يمكن عمل BreakEven لمجموعة صفقات بعد الوصول لربح معين بالدولار ؟ يعني عندي صفقات بيع وصفقات شراء(غير متساوية بحجم اللوت - ليست هيدج )
kira-h
18-10-2017, 05:49 PM
السلام عليكم أستاذ
هل يمكن عمل BreakEven لمجموعة صفقات بعد الوصول لربح معين بالدولار ؟ يعني عندي صفقات بيع وصفقات شراء(غير متساوية بحجم اللوت - ليست هيدج )
وعليكم السلام
نعم يمكن ذلك باستخدام البريك ايفن بالدولار وليس النقاط
Ahmed
20-10-2017, 03:47 AM
السلام عليكم اسناذ حسن
كيف اجعل الاكسبيرت ينقذ شرط معين كل يوم جديد
kira-h
20-10-2017, 05:14 PM
السلام عليكم اسناذ حسن
كيف اجعل الاكسبيرت ينقذ شرط معين كل يوم جديد
وعليكم السلام
اشرح أكثر الشرط المستخدم؟ وهل لفتح صفقة أو إغلاق ام ماذا؟
Ahmed
20-10-2017, 08:45 PM
كل يوم جديد يبدأ الاكسبيرت التحقق من شرط دخول الصفقة
kira-h
20-10-2017, 09:10 PM
كل يوم جديد يبدأ الاكسبيرت التحقق من شرط دخول الصفقة
ستقوم بعمل دالة لمعرفة عدد الصفقات المغلقة باليوم كالتالي :
int DailyClosed()
{
int cnt=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&MagicNo==OrderMagicNumber()&&OrderType()<=OP_SELL)
{
if(OrderOpenTime()>=iTime(Symbol(),PERIOD_D1,0)){cnt++;}
}
}
}
return(cnt);
}
ودالة لمعرفة عدد الصفقات المفتوحة باليوم كالتالي :
int DailyOpened()
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&MagicNo==OrderMagicNumber()&&OrderType()<=OP_SELL)
{
if(OrderOpenTime()>=iTime(Symbol(),PERIOD_D1,0)){cnt++;}
}
}
}
return(cnt);
}
ثم تكون الشروط قبل شروط فتح الصفقات كالتالي :
if((DailyClosed()+DailyOpened())>0)return;
بمعنى أنه لا يتم معالجة شروط فتح الصفقات إذا يوجد صفقة مفتوحة أو مغلقة باليوم
أبو عمر
21-10-2017, 07:13 PM
أخي الكريم، لا أحتاج إلى التجربة فالكود سليم
ولكن فقط لديك فهم خاطئ لقيمة النقطة
1000 ضرب الوظيفة Point يعني 100 نقطة بالمنصة الخماسية وألف نقطة بالمنصة الرباعية
وبما أنك متأكد بان الكود سليم 100%، فيمكنك الاستنتاج بالمنطق والعقل مصدر الخطأ
أخي م حسن أنا لم أجد أي خطأ بالكود وغيرت الشرط وحاولت لكن مع الأسف لا يعمل ويفتح صفقات بشكل اعتباطي لا علاقة لها بالشرط أياً كان
أرجو منك المساعدة في حل المشكلة وهذا هو الكود مع الشرط
double dn1,up1,dn2,up2,dn3,up3,dn4,up4,UP,DN;
if(Close[1]>Open[1])dn1=Open[1];up1=Close[1];
if(Close[1]<Open[1])dn1=Close[1];up1=Open[1];
if(Close[2]>Open[2])dn2=Open[2];up2=Close[2];
if(Close[2]<Open[2])dn2=Close[2];up2=Open[2];
if(Close[3]>Open[3])dn3=Open[3];up3=Close[3];
if(Close[3]<Open[3])dn3=Close[3];up3=Open[3];
if(Close[4]>Open[4])dn4=Open[4];up4=Close[4];
if(Close[4]<Open[4])dn4=Close[4];up4=Open[4];
UP=High[1]-up1+High[2]-up2+High[3]-up3+High[4]-up4;//إجمالي فرق الذيول العلوية
DN=dn1-Low[1]+dn2-Low[2]+dn3-Low[3]+dn4-Low[4];//إجمالي فرق الذيول السفلية
if((UP+DN)>500*point)//الشرط
sal_moh85
21-10-2017, 08:14 PM
سلام عليكم استاذ حسن
هل يوجد كود لي تحديد الأستوب لوز والهدف وترينيغ ستوب الديناميكي
وشكرا
Ahmed
21-10-2017, 11:00 PM
ستقوم بعمل دالة لمعرفة عدد الصفقات المغلقة باليوم كالتالي :
int DailyClosed()
{
int cnt=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&MagicNo==OrderMagicNumber()&&OrderType()<=OP_SELL)
{
if(OrderOpenTime()>=iTime(Symbol(),PERIOD_D1,0)){cnt++;}
}
}
}
return(cnt);
}
ودالة لمعرفة عدد الصفقات المفتوحة باليوم كالتالي :
int DailyOpened()
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&MagicNo==OrderMagicNumber()&&OrderType()<=OP_SELL)
{
if(OrderOpenTime()>=iTime(Symbol(),PERIOD_D1,0)){cnt++;}
}
}
}
return(cnt);
}
ثم تكون الشروط قبل شروط فتح الصفقات كالتالي :
if((DailyClosed()+DailyOpened())>0)return;
بمعنى أنه لا يتم معالجة شروط فتح الصفقات إذا يوجد صفقة مفتوحة أو مغلقة باليوم
شكرا كثيرا أخي حسن
kira-h
22-10-2017, 05:42 AM
سلام عليكم استاذ حسن
هل يوجد كود لي تحديد الأستوب لوز والهدف وترينيغ ستوب الديناميكي
وشكرا
وعليكم السلام
ماذا تقصد بالديناميكي، ممكن مثال عملي!
kira-h
22-10-2017, 05:43 AM
شكرا كثيرا أخي حسن
العفو اخي الكريم
والله الموفق
sal_moh85
22-10-2017, 01:32 PM
وعليكم السلام
ماذا تقصد بالديناميكي، ممكن مثال عملي!
سلام عليكم اخ حسن هي مثال في صوره عن موشر يستخدم atr في تحديد ترينيغ ستوب لوز37503750
وموشر المستخدم
عاوز كود استخدم فيوه هاد موشر لي ترينغ ستوب لوز
اذا امكن او اذا في طريقه احسن من هل موشر اني استخدمها
لانو لاحظة انو اغلب استراتيجيات ضعف تبعها في تحديد ستوب لوز وتك بروفيت والاهم من هاد كلوه الترينيغ ستوب
حاليا انا بستخدم موشر ATR لتحديد ستوب لوز وتك بروفيت
بس صفيان حاليا طريقة تحديد الترينغ ستوب لوز شفت هاد الموشر افضل شي تقريبا واذا في طريقه تانيه لي تحسين برجوا انك دلني عليها وشكرا
kira-h
22-10-2017, 06:16 PM
سلام عليكم اخ حسن هي مثال في صوره عن موشر يستخدم atr في تحديد ترينيغ ستوب لوز37503750
وموشر المستخدم
عاوز كود استخدم فيوه هاد موشر لي ترينغ ستوب لوز
اذا امكن او اذا في طريقه احسن من هل موشر اني استخدمها
لانو لاحظة انو اغلب استراتيجيات ضعف تبعها في تحديد ستوب لوز وتك بروفيت والاهم من هاد كلوه الترينيغ ستوب
حاليا انا بستخدم موشر ATR لتحديد ستوب لوز وتك بروفيت
بس صفيان حاليا طريقة تحديد الترينغ ستوب لوز شفت هاد الموشر افضل شي تقريبا واذا في طريقه تانيه لي تحسين برجوا انك دلني عليها وشكرا
وعليكم السلام
يمكنك استخدام وظيفة موديفاي الصفقة بالتعديل على ستوب أو هدف الصفقة بناءا على سعر المؤشر
مثلا نستخدم ستوب جديد بناءا على كل نقطة جديدة للبارابولك سار ستكون الدالة كالتالي :
void OnTick()
{
bool s,m;
double sar=iSAR(Symbol(),0,0.02,0.2,1);
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
int tk=OrderTicket(),
ty=OrderType(),
mn=OrderMagicNumber() ;
if(sy==Symbol()&&mn==MagicNo)
{
if(ty==OP_SELL)
{
if(Close[1]<sar&&sl!=sar)m=OrderModify(tk,op,sar,tp,0,Red);
}
if(ty==OP_BUY)
{
if(Close[1]>sar&&sl!=sar&&tp!=0)m=OrderModify(tk,op,sar,tp,0,Blue);
}
}
}
}
sal_moh85
22-10-2017, 10:56 PM
وعليكم السلام
يمكنك استخدام وظيفة موديفاي الصفقة بالتعديل على ستوب أو هدف الصفقة بناءا على سعر المؤشر
مثلا نستخدم ستوب جديد بناءا على كل نقطة جديدة للبارابولك سار ستكون الدالة كالتالي :
void OnTick()
{
bool s,m;
double sar=iSAR(Symbol(),0,0.02,0.2,1);
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
int tk=OrderTicket(),
ty=OrderType(),
mn=OrderMagicNumber() ;
if(sy==Symbol()&&mn==MagicNo)
{
if(ty==OP_SELL)
{
if(Close[1]<sar&&sl!=sar)m=OrderModify(tk,op,sar,tp,0,Red);
}
if(ty==OP_BUY)
{
if(Close[1]>sar&&sl!=sar&&tp!=0)m=OrderModify(tk,op,sar,tp,0,Blue);
}
}
}
}
مشكور جدا اخ حسن
kira-h
23-10-2017, 01:03 AM
مشكور جدا اخ حسن
بالتوفيق إن شاء الله
sabil
24-10-2017, 10:30 AM
- دالة رسم الفيبو كالتالي :
void draw_fibo(string name,datetime time1,double price1,datetime time2,double price2)
{
if(ObjectFind(name)==-1)
{
ObjectCreate(name,OBJ_FIBO,0,time1,price1,time2,pr ice2);
ObjectSet(name,OBJPROP_FIBOLEVELS,6);//تحدد عدد المستويات بهذا السطر
ObjectSet(name,OBJPROP_FIRSTLEVEL,0);
ObjectSetFiboDescription(name,0,"0.0 %$");
ObjectSet(name,OBJPROP_FIRSTLEVEL+1,0.236);
ObjectSetFiboDescription(name,1,"23.6 %$");
ObjectSet(name,OBJPROP_FIRSTLEVEL+2,0.382);
ObjectSetFiboDescription(name,2,"38.2 %$");
ObjectSet(name,OBJPROP_FIRSTLEVEL+3,0.50);
ObjectSetFiboDescription(name,3,"50.0 %$");
ObjectSet(name,OBJPROP_FIRSTLEVEL+4,0.618);
ObjectSetFiboDescription(name,4,"61.8 %$");
ObjectSet(name,OBJPROP_FIRSTLEVEL+5,1.00);
ObjectSetFiboDescription(name,5,"100.0 %$");
//يمكن إضافة مستويات أخرى
ObjectSet(name,OBJPROP_LEVELCOLOR,Yellow) ;//لون خطوط الفيبو
}
else if(ObjectGet(name,OBJPROP_PRICE1)!=price1||ObjectG et(name,OBJPROP_PRICE2)!=price2)
{
ObjectDelete(name);
draw_fibo(name,time1,price1,time2,price2);
}
}
مثال لعمل الفيبو على الهاي واللوو لليوم السابق :
double H=iHigh(Symbol(),PERIOD_D1,1),
L=iLow(Symbol(),PERIOD_D1,1);
datetime T=iTime(Symbol(),PERIOD_D1,1);
draw_fibo("FiboDaily",T,H,Time[0],L);
- أما قيم الخطوط يمكن استخراج فقط خط الـ 0 و الـ 100 وبناءا عايه تحسب بقية المستويات رياضيا
لمعرفة قيم المستويين 0 و 100 :
double Fi0=ObjectGet("FiboDaily",OBJPROP_PRICE1),
Fi100=ObjectGet("FiboDaily",OBJPROP_PRICE2);
Comment(Fi0," ",Fi100);
تنسيق رائع اخي حسن
ولكن
احتاج بعض التعديلات على الكود ليعمل بالشروط التالية
اريد ان اجعل الفيبوناتشي يرسم مرتين على الشارت
الاولى : من الهاي الى اللو لاخر شمعة اغلقت هابطة
الثانية : من اللو الى الهاي لاخر شمعة اغلقت صاعدة
وهكذا مع كل شمعة تغلق على تلك الشروط
النقطة الثانية
اريد ان اعرف كيفية كتابة شروط الدخول في الصفقات شراء وبيع
لاني كتبتها والاكسبرت لم يقرأها
يعني لو عايز اقوله اشتري من عند مستويات 161 و 261 و 423 .... الخ لو السعر قادم من الاسفل
والعكس في عملية البيع يبيع من نفس المستويات لو السعر قادم من الاعلى
اذن الشروط دي تتكتب ازاي ؟
kira-h
24-10-2017, 05:55 PM
تنسيق رائع اخي حسن
ولكن
احتاج بعض التعديلات على الكود ليعمل بالشروط التالية
اريد ان اجعل الفيبوناتشي يرسم مرتين على الشارت
الاولى : من الهاي الى اللو لاخر شمعة اغلقت هابطة
الثانية : من اللو الى الهاي لاخر شمعة اغلقت صاعدة
وهكذا مع كل شمعة تغلق على تلك الشروط
النقطة الثانية
اريد ان اعرف كيفية كتابة شروط الدخول في الصفقات شراء وبيع
لاني كتبتها والاكسبرت لم يقرأها
يعني لو عايز اقوله اشتري من عند مستويات 161 و 261 و 423 .... الخ لو السعر قادم من الاسفل
والعكس في عملية البيع يبيع من نفس المستويات لو السعر قادم من الاعلى
اذن الشروط دي تتكتب ازاي ؟
أهلا اخي
الشرح الذي أرفقته به كل الأجوبة التي تريد فقط تحتاج لتركيز
ونعم يمكنك رسم الفيبو مرتين على الشارت وذلك بتعديل اسم الفيبو كل بشرطه الخاص
مثال :
double H,L;
datetime T=iTime(Symbol(),PERIOD_D1,1);
if(Close[1]>Open[1])
{
H=iHigh(Symbol(),PERIOD_D1,1);
L=iLow(Symbol(),PERIOD_D1,1);
draw_fibo("Fibo UP",T,H,Time[0],L);
}
if(Close[1]<Open[1])
{
L=iHigh(Symbol(),PERIOD_D1,1);
H=iLow(Symbol(),PERIOD_D1,1);
draw_fibo("Fibo DN",T,H,Time[0],L);
}
اما أسعار خطوط الفيبو يمكنك استخراجها رياضيا بحيث لديك سعري النسبتين 0 و 100 كما وضحت بالشرح المرفق بمشاركتك
مثال
double fibo1,fibo2,distance=MathAbs(Fi0-Fi100);
if(Fi100<Fi0)
{
fibo1=Fi0-(distance*(161.8/100));
fibo2=Fi0-(distance*(261.8/100));
}
if(Fi100>Fi0)
{
fibo1=Fi0+(distance*(161.8/100));
fibo2=Fi0+(distance*(261.8/100));
}
NabileFX
24-10-2017, 07:23 PM
هذا الكود يوجد في المرجع الكامل لتعليم برمجة لغة MQL4، الصفحة 24 من الملف الأول pdf1 :
************************************************** ***
void drawshap(string name,color LineColor,double Price1,doub
le Price2,datetime Time1,datetime Time2)
{
if(ObjectFind(name) == ‐1)
{
ObjectCreate(name, OBJ_RECTANGLE, 0, Time1,Price1,T
ime2,Price2);
ObjectSet(name, OBJPROP_COLOR, LineColor);
ObjectSet(name, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(name, OBJPROP_WIDTH, 2);
}
else if(ObjectGet(name,OBJPROP_TIME1)!=Time1||Objec
tGet(name,OBJPROP_PRICE1)!=Price1){
ObjectDelete(name);
}
}
void drawTrend(string name,color LineColor,double Price1,dou
ble Price2,datetime Time1,datetime Time2,bool b)
{
if(ObjectFind(name) == ‐1)
{
ObjectCreate(name, OBJ_TREND, 0, Time1,Price1,Time2
,Price2);
ObjectSet(name, OBJPROP_COLOR, LineColor);
ObjectSet(name, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(name, OBJPROP_WIDTH, 2);
ObjectSet(name,OBJPROP_RAY,b);
}
else
**************************************
double H,L,O,C;
datetime T1,T2;
for(int i=1;i<Days_History;i++){
H=iHigh(Symbol(),1440,i);
L=iLow(Symbol(),1440,i);
T1=iTime(Symbol(),1440,i);
T2=iTime(Symbol(),1440,i‐1);
O=iOpen(Symbol(),1440,i);
C=iClose(Symbol(),1440,i);
if(DrawBox)drawshap("Box"+i,BoxColor,H,L,T1,T2);
if(DrawTrend)drawTrend("Trend"+i,TrendColor,O,C,T1,T2,Tr
end_Ray);
}
*********************************************
المرجو من الاستاذ حسن، شرح العبارات التالية:
DrawBox، DrawTrend، BoxColor، TrendColor
مع تقبل خالص امتناني..
NabileFX
24-10-2017, 07:31 PM
انتباه :
تمت تغيير 1- الى هذه العبارة â€گ1،
!!!!!
sabil
24-10-2017, 08:42 PM
أهلا اخي
الشرح الذي أرفقته به كل الأجوبة التي تريد فقط تحتاج لتركيز
ونعم يمكنك رسم الفيبو مرتين على الشارت وذلك بتعديل اسم الفيبو كل بشرطه الخاص
مثال :
double H,L;
datetime T=iTime(Symbol(),PERIOD_D1,1);
if(Close[1]>Open[1])
{
H=iHigh(Symbol(),PERIOD_D1,1);
L=iLow(Symbol(),PERIOD_D1,1);
draw_fibo("Fibo UP",T,H,Time[0],L);
}
if(Close[1]<Open[1])
{
L=iHigh(Symbol(),PERIOD_D1,1);
H=iLow(Symbol(),PERIOD_D1,1);
draw_fibo("Fibo DN",T,H,Time[0],L);
}
اما أسعار خطوط الفيبو يمكنك استخراجها رياضيا بحيث لديك سعري النسبتين 0 و 100 كما وضحت بالشرح المرفق بمشاركتك
مثال
double fibo1,fibo2,distance=MathAbs(Fi0-Fi100);
if(Fi100<Fi0)
{
fibo1=Fi0-(distance*(161.8/100));
fibo2=Fi0-(distance*(261.8/100));
}
if(Fi100>Fi0)
{
fibo1=Fi0+(distance*(161.8/100));
fibo2=Fi0+(distance*(261.8/100));
}
عملت كل حاجة وما زال لا يعمل
ارجو التعديل في المرفقات
mr.forex
24-10-2017, 11:38 PM
السلام عليكم أستاذ حسن
1- هل بالإمكان تغيير لون الخلفية للميتاإديتور من اللون الأبيض إلى أي لون آخر
2- في بعض الأحيان يتحرك سعر الآسك فقط ويبقى سعر البيد ثابت دون أي حركة
سؤالي هو هل سعر الأسك عندما يتحرك تكة واحدة تعتبر تكة سعرية يفهمها الاكسبيرت أم أن التكة السعرية محصورة على تحرك البيد فقط
تقبل تحيتي
silver
25-10-2017, 06:08 AM
صباح الخير اخي حسن اتمنى ان تكون بأفضل حال
ما هي القاعدة العامة أو الكود الخاص بإذا ظهر السهم أحمر يتم تنفيذ الشرط البرمجي
واذا ظهر السهم أخضر يتم تنفيذ الشرط البرمجي
مع خالص الشكر
kira-h
25-10-2017, 05:14 PM
السلام عليكم أستاذ حسن
1- هل بالإمكان تغيير لون الخلفية للميتاإديتور من اللون الأبيض إلى أي لون آخر
2- في بعض الأحيان يتحرك سعر الآسك فقط ويبقى سعر البيد ثابت دون أي حركة
سؤالي هو هل سعر الأسك عندما يتحرك تكة واحدة تعتبر تكة سعرية يفهمها الاكسبيرت أم أن التكة السعرية محصورة على تحرك البيد فقط
تقبل تحيتي
وعليكم السلام
نعم يمكن تغيير لون الخلفية من خلال : Tools => Options
ثم Colors كما بالصورة أسفله
3799
بالنسبة لتحرك الأسك منطقيا لا يعتبر تكة لأن الأسعار (أو الشموع) تتحرك عن طريق البيد
kira-h
25-10-2017, 05:54 PM
صباح الخير اخي حسن اتمنى ان تكون بأفضل حال
ما هي القاعدة العامة أو الكود الخاص بإذا ظهر السهم أحمر يتم تنفيذ الشرط البرمجي
واذا ظهر السهم أخضر يتم تنفيذ الشرط البرمجي
مع خالص الشكر
حياك الله أخي
لمعرفة شرط إشارة مؤشر اسهم على حسب نوعه وقيمته بتلك الشمعة
نوع المؤشر ينقسم إلى قسمين مؤشر اندكس وهو الذي لا نستطيع تغيير مكان السهم على الشارت وسنجد ألوانه بخانة منفصلة للمؤشر خاصة بالالوان
ويمكن معرفة قيمة هذا النوع من الأسهم باستخدام الوظيفة iCustom
مثال لقيمة سهم ازرق ذو اللون الاول بخانة الألون (0) لمؤشر اسمه Arrow عند الشمعة 1 كالتالي :
double up=iCustom(Symbol(),0,"Arrow",0,1);
بحيث 0 ترتيب لون السهم بخانة الألوان للمؤشر
1 رقم الشمعة
ثم نستخدم الوظيفة Comment لمعرفة قيمة المؤشر على الشارت عند بالشمعة 1، وعند عدم وجوده بالشمعة 1، لكي نستنتج الشرط من المقارنة :
Comment(up);
وبالتالي عند عدم وجود السهم الأزرق up بالشمعة 1 سنلاحظ أنه القيمة إما تأخد 0 أو 1- أو عدد كبيرة جدا 2147483647 أو أي قيمة أخرى...
وعند وجود السهم بالشمعة 1 نجد أن القيمة تغيرت إلى قيمة أخرى كدلالة على وجودة مثلا إلى السعر الحالي ، أو سعر اللو المهم مخالفة للقيم السابقة عند عدم وجوده
وبالتالي تكون الشروط ببساطة كالتالي :
if(up!=0)
أو
if(up!=-1)
أو
if(up!=EMPTY_VALUE)// EMPTY_VALUE=2147483647
يعني الشرط up يخالف قيمة السهم عند عدم وجوده بالشمعة 1 (أو أي شمعة)
نفس الشيء بالسهم الأحمر أو الهابط
//-----
نأتي الان إلى النوع الثاني عبارة عن كائن على الشارت (أوبجكت) يعني يمكن تحريك السهم بالماوس مثل الترندات والخطوط ...
سنستخدم في هذه الحالة الوظيفة ObjectGet لمعرفة توقيت ظهور السهم ونقارنها مع توقيت الشمعة 1 (أو أي شمعة أخرى حسب ما تريد)
مثال اسم السهم الصاعد UP سيكون الشرط كالتالي :
double buy=ObjectGet("UP",OBJPROP_TIME1);
if(buy>=Time[1])//شرط الشراء
sabil
26-10-2017, 12:07 AM
double Fi0_1=ObjectGet("Fibo UP",OBJPROP_PRICE1),
Fi100_1=ObjectGet("Fibo UP",OBJPROP_PRICE2),
Fi0_2=ObjectGet("Fibo DN",OBJPROP_PRICE1),
Fi100_2=ObjectGet("Fibo DN",OBJPROP_PRICE2);
Comment(Fi0_1,Fi100_1," ",Fi0_2,Fi100_2);
double H,L;
datetime T=iTime(Symbol(),0,1);
if(Close[1]>Open[1])
{
L=iLow(Symbol(),0,1);
H=iHigh(Symbol(),0,1);
draw_fibo("Fibo UP",T,L,Time[0],H);
}
if(Close[1]<Open[1])
{
H=iHigh(Symbol(),0,1);
L=iLow(Symbol(),0,1);
draw_fibo("Fibo DN",T,H,Time[0],L);
}
double fibo0,fibo1,fibo2,fibo3,fibo4,fibo5;
double distance1=MathAbs(Fi0_1+Fi100_1);
double distance2=MathAbs(Fi0_2-Fi100_2);
if(Fi100_2<Fi0_2)
{
fibo0=Fi0_2+(distance2*(161.8/100));
fibo1=Fi0_2+(distance2*(161.8/100));
fibo2=Fi0_2+(distance2*(261.8/100));
fibo3=Fi0_2+(distance2*(423.6/100));
fibo4=Fi0_2+(distance2*(685.4/100));
fibo5=Fi0_2+(distance2*(1010.9/100));
}
if(Fi100_1>Fi0_1)
{
fibo0=Fi0_1-(distance1*(161.8/100));
fibo1=Fi0_1-(distance1*(161.8/100));
fibo2=Fi0_1-(distance1*(261.8/100));
fibo3=Fi0_1-(distance1*(423.6/100));
fibo4=Fi0_1-(distance1*(685.4/100));
fibo5=Fi0_1-(distance1*(1010.9/100));
}
شروط الشراء
//-----------------------BUY Order
if((Low[1]>fibo1&&Low[0]<=fibo0) //C>KK&&S4<K&&S4>L4&&S1>O4//C28<=KK28&&C>KK&&S4>K&&S4>KD&&L4<=K&&L4<=KD//H4<T4&&H0<T0&&SD<T
||
(Low[1]>fibo2&&Low[0]<=fibo2))
شروط البيع
//-----------------------SELL Order
if((High[1]<fibo1&&High[0]>=fibo0) //C>KK&&S4<K&&S4>L4&&S1>O4//C28>=KK28&&C<KK&&S4<K&&S4<KD&&H4>=K&&H4>=KD//L4>T4&&L0>T0&&SD>T
||
(High[1]<fibo2&&High[0]>=fibo2))
اظن والله اعلم الخطأ في تعريف مستويات الفيبوناتشي
احنا حسبنا القيم بس لكن مش عملنا مستويات الفيبو كمتغيرات يتم استدعائها في شروط الدخول في الصفقات ولا ايه ؟
silver
26-10-2017, 12:52 AM
حياك الله أخي
لمعرفة شرط إشارة مؤشر اسهم على حسب نوعه وقيمته بتلك الشمعة
نوع المؤشر ينقسم إلى قسمين مؤشر اندكس وهو الذي لا نستطيع تغيير مكان السهم على الشارت وسنجد ألوانه بخانة منفصلة للمؤشر خاصة بالالوان
ويمكن معرفة قيمة هذا النوع من الأسهم باستخدام الوظيفة iCustom
مثال لقيمة سهم ازرق ذو اللون الاول بخانة الألون (0) لمؤشر اسمه Arrow عند الشمعة 1 كالتالي :
double up=iCustom(Symbol(),0,"Arrow",0,1);
بحيث 0 ترتيب لون السهم بخانة الألوان للمؤشر
1 رقم الشمعة
ثم نستخدم الوظيفة Comment لمعرفة قيمة المؤشر على الشارت عند بالشمعة 1، وعند عدم وجوده بالشمعة 1، لكي نستنتج الشرط من المقارنة :
Comment(up);
وبالتالي عند عدم وجود السهم الأزرق up بالشمعة 1 سنلاحظ أنه القيمة إما تأخد 0 أو 1- أو عدد كبيرة جدا 2147483647 أو أي قيمة أخرى...
وعند وجود السهم بالشمعة 1 نجد أن القيمة تغيرت إلى قيمة أخرى كدلالة على وجودة مثلا إلى السعر الحالي ، أو سعر اللو المهم مخالفة للقيم السابقة عند عدم وجوده
وبالتالي تكون الشروط ببساطة كالتالي :
if(up!=0)
أو
if(up!=-1)
أو
if(up!=EMPTY_VALUE)// EMPTY_VALUE=2147483647
يعني الشرط up يخالف قيمة السهم عند عدم وجوده بالشمعة 1 (أو أي شمعة)
نفس الشيء بالسهم الأحمر أو الهابط
//-----
نأتي الان إلى النوع الثاني عبارة عن كائن على الشارت (أوبجكت) يعني يمكن تحريك السهم بالماوس مثل الترندات والخطوط ...
سنستخدم في هذه الحالة الوظيفة ObjectGet لمعرفة توقيت ظهور السهم ونقارنها مع توقيت الشمعة 1 (أو أي شمعة أخرى حسب ما تريد)
مثال اسم السهم الصاعد UP سيكون الشرط كالتالي :
double buy=ObjectGet("UP",OBJPROP_TIME1);
if(buy>=Time[1])//شرط الشراء
ألف شكر لك أستاذي العزيز حسن
كعادتك مبدع دائما وإيضاح أكثر من رائع
والله يعجز لساني عن شكرك لما تقدمه لنا
وفقك الله ورزقك الخير الكثير بإذن الله
mr.forex
26-10-2017, 04:06 AM
وعليكم السلام
نعم يمكن تغيير لون الخلفية من خلال : Tools => Options
ثم Colors كما بالصورة أسفله
3799
بالنسبة لتحرك الأسك منطقيا لا يعتبر تكة لأن الأسعار (أو الشموع) تتحرك عن طريق البيد
ألف شكر لك مشرفنا القدير حسن الله يبارك فيك
kira-h
26-10-2017, 04:49 AM
double Fi0_1=ObjectGet("Fibo UP",OBJPROP_PRICE1),
Fi100_1=ObjectGet("Fibo UP",OBJPROP_PRICE2),
Fi0_2=ObjectGet("Fibo DN",OBJPROP_PRICE1),
Fi100_2=ObjectGet("Fibo DN",OBJPROP_PRICE2);
Comment(Fi0_1,Fi100_1," ",Fi0_2,Fi100_2);
double H,L;
datetime T=iTime(Symbol(),0,1);
if(Close[1]>Open[1])
{
L=iLow(Symbol(),0,1);
H=iHigh(Symbol(),0,1);
draw_fibo("Fibo UP",T,L,Time[0],H);
}
if(Close[1]<Open[1])
{
H=iHigh(Symbol(),0,1);
L=iLow(Symbol(),0,1);
draw_fibo("Fibo DN",T,H,Time[0],L);
}
double fibo0,fibo1,fibo2,fibo3,fibo4,fibo5;
double distance1=MathAbs(Fi0_1+Fi100_1);
double distance2=MathAbs(Fi0_2-Fi100_2);
if(Fi100_2<Fi0_2)
{
fibo0=Fi0_2+(distance2*(161.8/100));
fibo1=Fi0_2+(distance2*(161.8/100));
fibo2=Fi0_2+(distance2*(261.8/100));
fibo3=Fi0_2+(distance2*(423.6/100));
fibo4=Fi0_2+(distance2*(685.4/100));
fibo5=Fi0_2+(distance2*(1010.9/100));
}
if(Fi100_1>Fi0_1)
{
fibo0=Fi0_1-(distance1*(161.8/100));
fibo1=Fi0_1-(distance1*(161.8/100));
fibo2=Fi0_1-(distance1*(261.8/100));
fibo3=Fi0_1-(distance1*(423.6/100));
fibo4=Fi0_1-(distance1*(685.4/100));
fibo5=Fi0_1-(distance1*(1010.9/100));
}
شروط الشراء
//-----------------------BUY Order
if((Low[1]>fibo1&&Low[0]<=fibo0) //C>KK&&S4<K&&S4>L4&&S1>O4//C28<=KK28&&C>KK&&S4>K&&S4>KD&&L4<=K&&L4<=KD//H4<T4&&H0<T0&&SD<T
||
(Low[1]>fibo2&&Low[0]<=fibo2))
شروط البيع
//-----------------------SELL Order
if((High[1]<fibo1&&High[0]>=fibo0) //C>KK&&S4<K&&S4>L4&&S1>O4//C28>=KK28&&C<KK&&S4<K&&S4<KD&&H4>=K&&H4>=KD//L4>T4&&L0>T0&&SD>T
||
(High[1]<fibo2&&High[0]>=fibo2))
اظن والله اعلم الخطأ في تعريف مستويات الفيبوناتشي
احنا حسبنا القيم بس لكن مش عملنا مستويات الفيبو كمتغيرات يتم استدعائها في شروط الدخول في الصفقات ولا ايه ؟
لا توجد وظيفة مباشرة لمعرفة أسعار مستويات الفيبوناتشي دون المستويين 0 و 100
ولكن إذا عرفت مبدأ عمل الفيبوناتشي فسوف تجد أن الأمر سهل جدا رياضيا
بمراجعة سريعة للكود وجدت خطأ لديك بالجزء :
double distance1=MathAbs(Fi0_1+Fi100_1);
بحيث يجب أن تحسب الفرق وليس الجمع كالتالي :
double distance1=MathAbs(Fi0_1-Fi100_1);
kira-h
26-10-2017, 04:50 AM
ألف شكر لك أستاذي العزيز حسن
كعادتك مبدع دائما وإيضاح أكثر من رائع
والله يعجز لساني عن شكرك لما تقدمه لنا
وفقك الله ورزقك الخير الكثير بإذن الله
وإياك أخي الكريم
الله الموفق
kira-h
26-10-2017, 04:50 AM
ألف شكر لك مشرفنا القدير حسن الله يبارك فيك
العفو أخي الكريم هذا واجب
والله الموفق
sabil
26-10-2017, 01:46 PM
لا توجد وظيفة مباشرة لمعرفة أسعار مستويات الفيبوناتشي دون المستويين 0 و 100
ولكن إذا عرفت مبدأ عمل الفيبوناتشي فسوف تجد أن الأمر سهل جدا رياضيا
بمراجعة سريعة للكود وجدت خطأ لديك بالجزء :
double distance1=MathAbs(Fi0_1+Fi100_1);
بحيث يجب أن تحسب الفرق وليس الجمع كالتالي :
double distance1=MathAbs(Fi0_1-Fi100_1);
مش راضي يتظبط بردو
لما بكتب القيم بالشكل ده
if(Fi100_2<Fi0_2)
{
fibo0=Fi0_2+(distance2*(161.8/100));
fibo1=Fi0_2+(distance2*(161.8/100));
fibo2=Fi0_2+(distance2*(261.8/100));
fibo3=Fi0_2+(distance2*(423.6/100));
fibo4=Fi0_2+(distance2*(685.4/100));
fibo5=Fi0_2+(distance2*(1010.9/100));
}
if(Fi100_1>Fi0_1)
{
fibo0=Fi0_1-(distance1*(161.8/100));
fibo1=Fi0_1-(distance1*(161.8/100));
fibo2=Fi0_1-(distance1*(261.8/100));
fibo3=Fi0_1-(distance1*(423.6/100));
fibo4=Fi0_1-(distance1*(685.4/100));
fibo5=Fi0_1-(distance1*(1010.9/100));
}
بيفتح شراء فقط من عند مستوى 261 فقط رغم اني كاتب في الشروط يشتري من عند 161
-----------------------------------------------------------
ولما بكتب القيم بالشكل ده بيفتح بيع فقط ومن عند مستوى 261 فقط
if(Fi100_2<Fi0_2)
{
fibo0=Fi0_2-(distance2*(161.8/100));
fibo1=Fi0_2-(distance2*(161.8/100));
fibo2=Fi0_2-(distance2*(261.8/100));
fibo3=Fi0_2-(distance2*(423.6/100));
fibo4=Fi0_2-(distance2*(685.4/100));
fibo5=Fi0_2-(distance2*(1010.9/100));
}
if(Fi100_1>Fi0_1)
{
fibo0=Fi0_1+(distance1*(161.8/100));
fibo1=Fi0_1+(distance1*(161.8/100));
fibo2=Fi0_1+(distance1*(261.8/100));
fibo3=Fi0_1+(distance1*(423.6/100));
fibo4=Fi0_1+(distance1*(685.4/100));
fibo5=Fi0_1+(distance1*(1010.9/100));
}
لذا ارجو التعديل على الاكسبرت المرفق في تلك المشاركة
http://www.fxprg.com/vb/showthread.php?t=31457&p=874349&viewfull=1#post874349
كي نختصر الطريق بدلا من التساؤلات الكثيرة
sabil
26-10-2017, 01:55 PM
وبالنسبة للشروط سأشرحها مرة أخرى
نرسم الفيبو من الهاي الى اللو لاخر شمعة اغلقت هابطة
ونرسم الفيبو من اللو الى الهاي لاخر شمعة اغلقت صاعدة
شروط الشراء كالاتي :
هاي الشمعة رقم 1 اصغر من مستوى فيبو 161 ثم هاي الشمعة 0 اكبر من او يساوي مستوى فيبو 161
يفتح صفقة شراء
كذلك الامر مع مستوى 261
هاي الشمعة رقم 1 اصغر من مستوى فيبو 261 ثم هاي الشمعة 0 اكبر من او يساوي مستوى فيبو 261
وهكذا دواليك مع باقي المستويات 423 ..... الخ
شروط البيع
للو الشمعة رقم 1 اكبر من مستوى فيبو 161 ثم للو الشمعة 0 اصغر من او يساوي مستوى فيبو 161
يفتح صفقة بيع
كذلك الامر مع مستوى 261
للو الشمعة رقم 1 اكبر من مستوى فيبو 261 ثم للو الشمعة 0 اصغر من او يساوي مستوى فيبو 261
وهكذا دواليك مع باقي المستويات 423 ..... الخ
كل شيء مكتوب وجاهز في الاكسبرت المرفق اعلاه
ارجو فقط تعديل الاخطاء ان وجد لانه لا يعمل كما اريد
وشكراً
kira-h
26-10-2017, 09:27 PM
وبالنسبة للشروط سأشرحها مرة أخرى
نرسم الفيبو من الهاي الى اللو لاخر شمعة اغلقت هابطة
ونرسم الفيبو من اللو الى الهاي لاخر شمعة اغلقت صاعدة
شروط الشراء كالاتي :
هاي الشمعة رقم 1 اصغر من مستوى فيبو 161 ثم هاي الشمعة 0 اكبر من او يساوي مستوى فيبو 161
يفتح صفقة شراء
كذلك الامر مع مستوى 261
هاي الشمعة رقم 1 اصغر من مستوى فيبو 261 ثم هاي الشمعة 0 اكبر من او يساوي مستوى فيبو 261
وهكذا دواليك مع باقي المستويات 423 ..... الخ
شروط البيع
للو الشمعة رقم 1 اكبر من مستوى فيبو 161 ثم للو الشمعة 0 اصغر من او يساوي مستوى فيبو 161
يفتح صفقة بيع
كذلك الامر مع مستوى 261
للو الشمعة رقم 1 اكبر من مستوى فيبو 261 ثم للو الشمعة 0 اصغر من او يساوي مستوى فيبو 261
وهكذا دواليك مع باقي المستويات 423 ..... الخ
كل شيء مكتوب وجاهز في الاكسبرت المرفق اعلاه
ارجو فقط تعديل الاخطاء ان وجد لانه لا يعمل كما اريد
وشكراً
تم التصحيح بالنسخة المرفقة
sabil
27-10-2017, 05:45 PM
يبقى الوضع كما هو عليه
لم يفتح صفقات
جربت الحلقات بحيث يقرأ فيبو اخر شمعة اغلقت صاعدة وهابطة ومش نافع بردو