1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
مستر دولار عفوا للأزعاج ارفقت لك صورة يمكن توضح هدفي اذا الشرح مش واضح ، في متغير بيحمل رقم 3333 ودا يعتبر ماجيك لأكسبيرت معين وبيتكرر عدة مرات في اماكن مختلفة داخل الأكسبيرت
فأنا اقدر اعدله يدوي لكن الموضوع متعب وممكن تفوت مني وحدة من المرات المتعددة ، فأضفت الماجيك الذي هو 215315 ، وعايزه يحتل كل الأماكن المكتوب فيها OrderId27 مثلا ، ياريت تشوف الصورة والخطاء اللي بيحصل لما بعمل كوميلر ، على فكرة لو حطيت الجملة دي تحت قسم int او قسم Start مابيعطي رسالة خطاء في الكومبيلر لكن مابيحصل التغيير الذي اهدف اليه ، ولو حطيته
في الجزء الأول من الأكسبيرت بيعطي رسالة الخطاء ، شكرا لتعاونك .
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
الخطأ لديك في في نوع الأمر فيجب أن تحدد إذا كان سعر الدخول للأوامر المعلقه أقل من السعر الحالي فسوف يكون الأمر OP_SELLSTOP وليس ليميت وأيضا بالنسبه للشراء إذا كان سعر وضع الأمر المعلق أكبر من السعر الحالي فسوف يكون باي ستوب وليس ليميت
تم التعديل ولى سؤال لماذا ظهر خطـأ OrderSend error 130 من قبل مع وجود او عدم وجود تارجت واستوب ولماذا فتح صفقات بيع وشراء (ليست معلقة) قبل التعديل ، المفترض لن يفتح اى صفقات طالمـا كان الخطـأ فـ نوع الأمر المعلق !!
وفـ حالة أمر أوردر سيند الخاص بالأوامر المعلقة هل يجب وضع كود المقارنة الخاص بالتارجت والاستوب قبل كل أمر كود PHP:
if(StopLoss==0){SL=0;}else{SL=Bid+StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*point;}
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
يمكنك إضافة أي نوع مضاعفات إذا عرفت المعادله الرياضيه التي تعتمد عليها
بالنسبه لمضاعفات فيبوناتشي فهي تعتمد على مجموع حجم لوت آخر صفقتين مفتوحه
في هذه الحاله أنا أقوم بعمل داله لحساب حجم اللوت الجديد
مثال
كود PHP:
double fibo_lots()
{
double newlot;
for(int i=OrdersTotal();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
newlot+=OrderLots();
N++;
if(N==2)return(newlot);
}
}
return(newlot);
}
for(int i=0;i<=NumOF_Additional_LIMITSTOPLots;i++){
if(OpenPrice(OP_BUY)!=0 &&orderstotal2(OP_BUYLIMIT)<i && NumOF_Additional_LIMITSTOP_Lots==true){
double lot=fibo_lots();
OrderSend(Symbol(),OP_BUYLIMIT,lot,OpenPrice(OP_BUY)-Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue);
}
بالنسبه للإكسبرت
طريقة كتابتك للكود خاطئة فلا يمكن إستخدام عملية العطف || بهذا الطريقه لكن يجب تفصيلها
كود PHP:
if(Ask==buysl||Bid==buys1||Ask==SeLLsl||Bid==SeLLsl){CloseOrders();}
أيضا سؤال هل تريد إغلاق الصفقه على سعر إغلاق الشمعه السابقه أم على سعر إغلاق الشمعه السابقه للشمعه التي تم فتح الصفقه فيها بحيث لن تتغير حتى لو بعد مرور 10 شمعات ولم تغلق الصفقه بعد
نعم أريد إغلاق الصفقه على سعر إغلاق الشمعه السابقه للشمعه التي تم فتح الصفقه فيها بحيث لن تتغير حتى لو بعد مرور 10 شمعات ولم تغلق الصفقه بعد وقمت بتعديل الكود الخاص بالعطف .
بالنسبة لإضافة مضاعفات فيبوناتشي قمت بعمل دالة لحساب حجم اللوت الجديد خارج ستارت
كود PHP:
double fibo_lots()
{
double newlot;
int N;
for(int i=OrdersTotal();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
newlot+=OrderLots();
N++;
if(N==2)return(newlot);
}
}
return(newlot);
}
ووضعت الكود الخاص بالدالة داخل ستارت
كود PHP:
int i,j;
for(i=0,j=1;i<NumOF_Additional_LIMITSTOPLots;i++,j+=j){
double lot=fibo_lots();
if(OpenPrice(OP_BUY)!=0 &&orderstotal2(OP_BUYLIMIT)<i && NumOF_Additional_LIMITSTOP_Lots==true){
OrderSend(Symbol(),OP_BUYLIMIT,lot*j,OpenPrice(OP_BUY)-Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue);}
if(OpenPrice(OP_SELL)!=0 &&orderstotal2(OP_SELLLIMIT)<i && NumOF_Additional_LIMITSTOP_Lots==true){
OrderSend(Symbol(),OP_SELLLIMIT,lot*j,OpenPrice(OP_SELL)+Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Red);}
}
ولكن المضاعفات يتم فتحها كالتالى 1 ، 2 ، 12 ، 112 ، 1984
وليست مضاعفات فيبوناتشي .
ولى سؤال بخصوص الدالة fibo_lots
لماذا تم وضع الأمر return مرتين ، وفـ حالة الشرط
- لماذا تم وضع الشرط N==2 !!
- عند بداية العد ستصبح قيمة N =0 ثم بعد ذلك 1 ثم 2 ويتحقق شرط if
بعد ان تصبح قيمة N تساوى 3 ، 4 ، 5 ، ... لن يتحقق شرط if
فـ هذه الحالة ماذا ستكون القيمة الـتى يعود بها الأمر return
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة spiders101
تم التعديل ولى سؤال لماذا ظهر خطـأ OrderSend error 130 من قبل مع وجود او عدم وجود تارجت واستوب ولماذا فتح صفقات بيع وشراء (ليست معلقة) قبل التعديل ، المفترض لن يفتح اى صفقات طالمـا كان الخطـأ فـ نوع الأمر المعلق !!
وفـ حالة أمر أوردر سيند الخاص بالأوامر المعلقة هل يجب وضع كود المقارنة الخاص بالتارجت والاستوب قبل كل أمر
كود PHP:
if(StopLoss==0){SL=0;}else{SL=Bid+StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*point;}
نعم أريد إغلاق الصفقه على سعر إغلاق الشمعه السابقه للشمعه التي تم فتح الصفقه فيها بحيث لن تتغير حتى لو بعد مرور 10 شمعات ولم تغلق الصفقه بعد وقمت بتعديل الكود الخاص بالعطف .
بالنسبة لإضافة مضاعفات فيبوناتشي قمت بعمل دالة لحساب حجم اللوت الجديد خارج ستارت
كود PHP:
double fibo_lots()
{
double newlot;
int N;
for(int i=OrdersTotal();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
newlot+=OrderLots();
N++;
if(N==2)return(newlot);
}
}
return(newlot);
}
ووضعت الكود الخاص بالدالة داخل ستارت
كود PHP:
int i,j;
for(i=0,j=1;i<NumOF_Additional_LIMITSTOPLots;i++,j+=j){
double lot=fibo_lots();
if(OpenPrice(OP_BUY)!=0 &&orderstotal2(OP_BUYLIMIT)<i && NumOF_Additional_LIMITSTOP_Lots==true){
OrderSend(Symbol(),OP_BUYLIMIT,lot*j,OpenPrice(OP_BUY)-Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue);}
if(OpenPrice(OP_SELL)!=0 &&orderstotal2(OP_SELLLIMIT)<i && NumOF_Additional_LIMITSTOP_Lots==true){
OrderSend(Symbol(),OP_SELLLIMIT,lot*j,OpenPrice(OP_SELL)+Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Red);}
}
ولكن المضاعفات يتم فتحها كالتالى 1 ، 2 ، 12 ، 112 ، 1984
وليست مضاعفات فيبوناتشي .
ولى سؤال بخصوص الدالة fibo_lots
لماذا تم وضع الأمر return مرتين ، وفـ حالة الشرط
-
لماذا تم وضع الشرط N==2 !!
- عند بداية العد ستصبح قيمة N =0 ثم بعد ذلك 1 ثم 2 ويتحقق شرط if
بعد ان تصبح قيمة N تساوى 3 ، 4 ، 5 ، ... لن يتحقق شرط if
فـ هذه الحالة ماذا ستكون القيمة الـتى يعود بها الأمر return
بالنسبة لتحديد حجم اللوت بواسطة الفيبوناتشي
يمكنك إستخدام رقم 1.618 مباشرة لتحديد حجم اللوت
عن طريق ضرب حجم أخر لوت × 1.618 وتقريب الناتج عن طريق MathRound() لأقرب عدد صحيح
ستقوم أولاً بعمل دالة لتأتي بقيمة أخر لوت
ثم تقوم بحساب اللوت الجديد بالشكل ده
كود PHP:
double Lot=MathRound (LastLot()*1.618);
أو تستخدمها مباشرة في الأوردر
كود PHP:
OrderSend(Symbol(),OP_BUYLIMIT,MathRound(LastLot()*1.618),OpenPrice(OP_BUY)-Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue);
والأفضل بدل MathRound تستخدم NormalizeDouble عشان اللوتات العشرية بالشكل ده
كود PHP:
NormalizeDouble (LastLot()*1.618,1);
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة Jmeel
استاذي انا ذكرت في مشاركتي اني لو حطيت تساوي للمتغيرين تحت قسم int أو start مفيش مشكلة في الكومبيلر لكن مافيش تأثير حقيقي وتغيير للأرقام وكأني مغيرتش حاجه ، ياريت اصل الى حل يقبل استبدال قيمة الرقم في BUYID الى قيمة الرقم في الماجيك ، وشكرا
طيب يا اخ جميل إنت ممكن تشيل المتغير BuyOrderId27 من المتغيرات الخارجية خالص
أولا ستقوم بتعريف المتغير خارج أي دالة يعني ضعه مثلا أسفل المتغيرات الخارجية وقبل init()
كود PHP:
int BuyOrderId27;
وتقوم بتعريف متغير في init() أو start()
كود PHP:
BuyOrderId27=MagicNo;
وبالتالي لن تحتاج لتغير أي شئ في الإكسبيرت
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
الخطأ 130 إما خطأ في الهدف أو الأستوب أو خطأ في مكان وضع الأمر المعلق وبالتأكيد لم يفتح صفقات بيع وشراء بدلا من الأوامر المعلقه لكن تأكد من أن كود آخر في الإكسبرت هو السبب في فتح الصفقات
في حال أي أمر سواء معلق أو بسعر مباشر فيجب أن تضع شروط الهدف والأستوب لوز
لكن في الأمر المعلق لن تعتمد على سعر الأسك والبيك لكن ستعتمد على سعر وضع الأمر المعلق + أو - الهدف والأستوب
مثلا
كود PHP:
if(StopLoss==0){SL=0;}else{SL=OpenPrice(OP_SELL)+StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=OpenPrice(OP_SELL)-TakeProfit*point;}
بالنسبه لحجم اللوت فلن تحتاج إلى إستخدام lot*j وهو سبب الخطأ لكن ستستخدم الداله مباشرة
كود PHP:
lot=fibo_lots();
OrderSend(Symbol(),OP_BUYLIMIT,lot,OpenPrice(OP_BUY)-Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue);}
لماذا إستخدمت return مرتين
في المره الأولى حتى بعد أن يجمع حجم لوت آخر صفقتين ويجد أن المقارنه N=2 أي أنه تم المرور على صفقتين فإنه يتوقف ويحفظ حجم اللوت
في المره الثانيه بحيث إذا كان عدد الصفقات المفتوحه واحد فقط بالتالي لن يتحقق الشرط وسوف تنتهي الحلقه فيقوم بحفظ حجم اللوت الأول فقط
أنا لا اريد إلا قيمة N=2 فقط حتى أتأكد من أن آخر صفقتين تم جمع حجم اللوت لهم وبالتالي تنتهي الحلقه
وقيمة N لن تزيد عن 2 أبدا لأني في كل مره أنهي الحلقه والداله
تم التعديل والآن عرفت سبب عدم إغلاق الصفقات المعلقة بعد تفعيلها على الهدف .
وشروط الأوامر المعلقة الآن اصبحت هكذا
كود PHP:
/////////////////////////////////////// Delete pending Order //////////////////////////
if(orderstotal2(OP_BUY)+orderstotal2(OP_SELL)==0){
orderDelete(OP_BUYLIMIT);orderDelete(OP_SELLLIMIT);orderDelete(OP_BUYSTOP);orderDelete(OP_SELLSTOP);}
/////////////////////////////////////// Additional Buy & SELL Lots //////////////////////////
if(OpenPrice(OP_BUY)-Ask>Space*point && OpenPrice(OP_BUY)!=0 && Additional_Buy_SELL_Lots==true){
if(StopLoss==0){SL=0;}else{SL=Ask-StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*point;}
OrderSend(Symbol(),OP_BUY,lot*2,NormalizeDouble(Ask,digits),5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue);}
if(Bid-OpenPrice(OP_SELL)>Space*point && OpenPrice(OP_SELL)!=0 && Additional_Buy_SELL_Lots==true){
if(StopLoss==0){SL=0;}else{SL=Bid+StopLoss*Point;}
if(TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*Point;}
OrderSend(Symbol(),OP_SELL,lot*2,NormalizeDouble(Bid,digits),5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Red);}
/////////////////////////////////////// Additional LIMIT & STOP Lots //////////////////////////
if(OpenPrice(OP_BUY)!=0 &&orderstotal2(OP_BUYLIMIT)<1 && Additional_LIMIT_STOP_Lots==true){
if(StopLoss==0){SL=0;}else{SL=(OpenPrice(OP_BUY)-Space*point)-StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=(OpenPrice(OP_BUY)-Space*point)+TakeProfit*point;}
OrderSend(Symbol(),OP_BUYLIMIT,lot*2,OpenPrice(OP_BUY)-Space*point,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue);}
if(OpenPrice(OP_SELL)!=0 &&orderstotal2(OP_SELLLIMIT)<1 && Additional_LIMIT_STOP_Lots==true){
if(StopLoss==0){SL=0;}else{SL=(OpenPrice(OP_SELL)+Space*point)+StopLoss*Point;}
if(TakeProfit==0){TP=0;}else{TP=(OpenPrice(OP_SELL)+Space*point)-TakeProfit*Point;}
OrderSend(Symbol(),OP_SELLLIMIT,lot*2,OpenPrice(OP_SELL)+Space*point,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Red);}
///////////////////////////////////////NumOF_Additional_LIMITSTOP_Lots //////////////////////////
if(Fibo_NumOF_Additional_LIMITSTOP==false){
int i,j;
for(i=0,j=1;i<NumOF_Additional_LIMITSTOPLots;i++,j+=j){
if(OpenPrice(OP_BUY)!=0 &&orderstotal2(OP_BUYLIMIT)<i && NumOF_Additional_LIMITSTOP_Lots==true){
if(StopLoss==0){SL=0;}else{SL=(OpenPrice(OP_BUY)-Space*point*i)-StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=(OpenPrice(OP_BUY)-Space*point*i)+TakeProfit*point;}
OrderSend(Symbol(),OP_BUYLIMIT,lot*j,OpenPrice(OP_BUY)-Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue);}
if(OpenPrice(OP_SELL)!=0 &&orderstotal2(OP_SELLLIMIT)<i && NumOF_Additional_LIMITSTOP_Lots==true){
if(StopLoss==0){SL=0;}else{SL=(OpenPrice(OP_SELL)+Space*point*i)+StopLoss*Point;}
if(TakeProfit==0){TP=0;}else{TP=(OpenPrice(OP_SELL)+Space*point*i)-TakeProfit*Point;}
OrderSend(Symbol(),OP_SELLLIMIT,lot*j,OpenPrice(OP_SELL)+Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Red);}
}}//set multiplier by 2,4,8,16 and if we need 2,4,6,8 use j=0 and j++ and lot*2*j
///////////////////////////////////////Fibo_NumOF_Additional_LIMITSTOP_Lots //////////////////////////
if(Fibo_NumOF_Additional_LIMITSTOP==true){
for(i=0;i<NumOF_Additional_LIMITSTOPLots;i++){
double lot=fibo_lots();
if(OpenPrice(OP_BUY)!=0 &&orderstotal2(OP_BUYLIMIT)<i){
if(StopLoss==0){SL=0;}else{SL=(OpenPrice(OP_BUY)-Space*point*i)-StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=(OpenPrice(OP_BUY)-Space*point*i)+TakeProfit*point;}
OrderSend(Symbol(),OP_BUYLIMIT,lot,OpenPrice(OP_BUY)-Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue);}
if(OpenPrice(OP_SELL)!=0 &&orderstotal2(OP_SELLLIMIT)<i){
if(StopLoss==0){SL=0;}else{SL=(OpenPrice(OP_SELL)+Space*point*i)+StopLoss*Point;}
if(TakeProfit==0){TP=0;}else{TP=(OpenPrice(OP_SELL)+Space*point*i)-TakeProfit*Point;}
OrderSend(Symbol(),OP_SELLLIMIT,lot,OpenPrice(OP_SELL)+Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Red);}
}}
/////////////////////////////////////// Reversed Multiplier //////////////////////////
if(OpenPrice(OP_BUY)-Ask>Space*point&&OpenPrice(OP_BUY)!=0&&LastOrderType()==OP_BUY&&Reversed_Multiplier==true){
if(StopLoss==0){SL=0;}else{SL=Bid+StopLoss*Point;}
if(TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*Point;}
OrderSend(Symbol(),OP_SELL,lot*2,NormalizeDouble(Bid,digits),5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Red);}
if(Bid-OpenPrice(OP_SELL)>Space*point&&OpenPrice(OP_SELL)!=0&&LastOrderType()==OP_SELL&&Reversed_Multiplier==true){
if(StopLoss==0){SL=0;}else{SL=Ask-StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*point;}
OrderSend(Symbol(),OP_BUY,lot*2,NormalizeDouble(Ask,digits),5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue);}
/////////////////////////////////////// Reversed Multiplier2 //////////////////////////
if(OpenPrice(OP_BUY)!=0&&orderstotal2(OP_SELLSTOP)<1&&LastOrderType()==OP_BUY&&Reversed_Multiplier2==true){
if(StopLoss==0){SL=0;}else{SL=(OpenPrice(OP_BUY)-Space*point)+StopLoss*Point;}
if(TakeProfit==0){TP=0;}else{TP=(OpenPrice(OP_BUY)-Space*point)-TakeProfit*Point;}
OrderSend(Symbol(),OP_SELLSTOP,lot*2,OpenPrice(OP_BUY)-Space*point,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Red);}
if(OpenPrice(OP_SELL)!=0&&orderstotal2(OP_BUYSTOP)<1&&LastOrderType()==OP_SELL&&Reversed_Multiplier2==true){
if(StopLoss==0){SL=0;}else{SL=(OpenPrice(OP_SELL)+Space*point)-StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=(OpenPrice(OP_SELL)+Space*point)+TakeProfit*point;}
OrderSend(Symbol(),OP_BUYSTOP,lot*2,OpenPrice(OP_SELL)+Space*point,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue);}
//Hint:OrderOpenPrice For Pending Orders>Current price -- orders-->(OP_BUYSTOP&&OP_SELLLIMIT)
//Hint:OrderOpenPrice For Pending Orders<Current price -- orders-->(OP_BUYLIMIT&&OP_SELLSTOP)
///////////////////////////////////////////////////////////////////////////////////////////
هل يمكن التعديل أو كتابة الأكواد بشكل أسهل من السابق لأني سأضيف شروط أخرى للأوامر المعلقة
وبالنسبة للاكسيبرت المرفق ، طلبي مرة أخرى ، أريد إغلاق الصفقه على سعر إغلاق الشمعه السابقه للشمعه التي تم فتح الصفقه فيها بحيث لن تتغير حتى لو بعد مرور 10 شمعات ولم تغلق الصفقه بعد .
وأنا قمت بوضع
كود PHP:
double buys1=Close[1];
كود PHP:
double SeLLsl=Close[1];
بعد أوردر سيند ، ووضع الشرط داخل ستارت
كود PHP:
if(Ask==buys1||Ask==SeLLsl||Bid==buys1||Bid==SeLLsl){CloseOrders();}
ولكن لايتم إغلاق الصفقة على سعر إغلاق الشمعة السابقة
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة xcv114
بالنسبة لتحديد حجم اللوت بواسطة الفيبوناتشي
يمكنك إستخدام رقم 1.618 مباشرة لتحديد حجم اللوت
عن طريق ضرب حجم أخر لوت × 1.618 وتقريب الناتج عن طريق MathRound() لأقرب عدد صحيح
ستقوم أولاً بعمل دالة لتأتي بقيمة أخر لوت
ثم تقوم بحساب اللوت الجديد بالشكل ده
كود PHP:
double Lot=MathRound (LastLot()*1.618);
أو تستخدمها مباشرة في الأوردر
كود PHP:
OrderSend(Symbol(),OP_BUYLIMIT,MathRound(LastLot()*1.618),OpenPrice(OP_BUY)-Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue);
والأفضل بدل MathRound تستخدم NormalizeDouble عشان اللوتات العشرية بالشكل ده
كود PHP:
NormalizeDouble (LastLot()*1.618,1);
استاذ يوسف ، أرجو ان تعذرني لم انتبه للمشاركة إلا الآن ، الاكسيبرتات الرقمية متعبة وأفكارها صعبة برمجيـا وتأخذ وقت طويل :doh:
وجزاك الله خيرا على المساعدة ولكن انا أريد مضاعفات فيبوناتشي تكون كالتالى 1 - 1 - 2 - 3 - 5 - 8 - 13 - 21 - 34 - 55 - 89 اي يتم جمع حجم لوت آخر صفقتين ويكون هو حجم اللوت الجديد ، وليس عن طريق ضرب حجم أخر لوت × 1.618 لأنه فـ حالة الضرب والتقريب بـ NormalizeDouble مع فرض أول لوت = 1
باقى المضاعفات تكون كالتالى 1 ، 1.60 ، 2.60 ، 4.20 ، 6.80 ، ...
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة spiders101
استاذ يوسف ، أرجو ان تعذرني لم انتبه للمشاركة إلا الآن ، الاكسيبرتات الرقمية متعبة وأفكارها صعبة برمجيـا وتأخذ وقت طويل :doh:
وجزاك الله خيرا على المساعدة ولكن انا أريد مضاعفات فيبوناتشي تكون كالتالى 1 - 1 - 2 - 3 - 5 - 8 - 13 - 21 - 34 - 55 - 89 اي يتم جمع حجم لوت آخر صفقتين ويكون هو حجم اللوت الجديد ، وليس عن طريق ضرب حجم أخر لوت × 1.618 لأنه فـ حالة الضرب والتقريب بـ NormalizeDouble مع فرض أول لوت = 1
باقى المضاعفات تكون كالتالى 1 ، 1.60 ، 2.60 ، 4.20 ، 6.80 ، ...
أصلا يا محمد أي حاجة بتعتمد على الفيبوناتشي ... بتكون مستوحاه من الرقم ده 1.618
ولوتات الفيبوناتشي من الأساس محسوبة بالطريقة إللي بقولك عليها دي
تضرب أخر لوت × 1.618 وتقرب الناتج ستجد اللوتات 1 - 2 - 3 - 5 - 8 - 13 وهكذا
يعني جرب تضع أي حجم لوت في الكود ده وضع الكود في إكسبيرت وشوف هيطبع إية
كود PHP:
double c=NormalizeDouble (0.5*1.618,1);
Print(c);
شوف بقى جرب بدل 0.5 جرب 0.8 - 1.3 - 0.3
هتلاقي في كل مرة بيطبع حجم لوت الفيبوناتشي التالي
2 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة xcv114
أصلا يا محمد أي حاجة بتعتمد على الفيبوناتشي ... بتكون مستوحاه من الرقم ده 1.618
ولوتات الفيبوناتشي من الأساس محسوبة بالطريقة إللي بقولك عليها دي
تضرب أخر لوت × 1.618 وتقرب الناتج ستجد اللوتات 1 - 2 - 3 - 5 - 8 - 13 وهكذا
يعني جرب تضع أي حجم لوت في الكود ده وضع الكود في إكسبيرت وشوف هيطبع إية
كود PHP:
double c=NormalizeDouble (0.5*1.618,1);
Print(c);
شوف بقى جرب بدل 0.5 جرب 0.8 - 1.3 - 0.3
هتلاقي في كل مرة بيطبع حجم لوت الفيبوناتشي التالي
أنا فاهم الفكرة ياغالى ، لكن المشكلة فـ التقريب عن طريق الـ NormalizeDouble
أمر الأوردر سيند بعد التعديل
كود PHP:
OrderSend(Symbol(),OP_BUYLIMIT,NormalizeDouble(lastlot2()*1.618,1),OpenPrice(OP_BUY)-Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue);
ودالة
تعود بحجم لوت آخر صفقة مفتوحة
ولكن النتيجة بعد الباك تست مع لوت 1 لأول عقد
https://forum.arabictrader.com/attac...8&d=1343838799
والمفترض المضاعفات كالتالى 1 - 1 - 2 - 3 - 5 - 8 - 13 - 21 - 34