من فضلكم اريد كود لامر تحديد الشراء مع امر اخذ الربح و يعيد نفس الامر اذا تفعل الامر تحديد الشراء او امر اخذ الربح
Printable View
من فضلكم اريد كود لامر تحديد الشراء مع امر اخذ الربح و يعيد نفس الامر اذا تفعل الامر تحديد الشراء او امر اخذ الربح
يجب أن توضح أكثر
أعتقد أنك تقصد أوامر معلقه
كمثال
حيث Price هو سعر مكان وضع الأمر المعلق و SL هو الأستوب لوز و TP هو الهدفكود PHP:OrderSend(Symbol(),OP_BUYSTOP,Lots,Price,3,SL,TP,"EA",MagicNumber,0,Green);
يوجد أيضا
OP_BUYLIMIT و OP_SELLSTOP و OP_SELLLIMIT
إذا كنت تريد وضع الأمر مره أخرى في حال تفعل الأمر فسوف تحتاج إلى عمل داله لمعرفة هل الصفقه تفعلت أم لا
كمثال
ثم تضع شرطكود PHP:int orderscnt(int type){
int cnt=0;
for(int i =0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber&&OrderType()==type){
cnt++;
}
}
}
return(cnt);
}
كود PHP:if(orderscnt(OP_BUYSTOP)<1){
OrderSend(Symbol(),OP_BUYSTOP,Lots,Price,3,SL,TP,"EA",MagicNumber,0,Green);
}
السلام عليكم اخي العزيز استاذ اسامة ..
الله يرحم والديك ننتظر من حضرتك تعديل خطأ البرمجي لآخر نسخة من اكسبيرت لموضوع https://forum.arabictrader.com/t141767.html
حيث ان الاكسبيرت من ناحية تطبيق الفكرة تمام وميه ميه ... جزاك الله كل خير
ولكن يوجد اخي الكريم خطأين بسيطين في البرمجة يرجى تعديلهم حيث ان :-
1- الخطأ الاول انه عند التعزيز الثاني لا يقوم الاكسبيرت بأخذ ضعف العقد ( التعزيز الاول ) بمعادلة التالية
فإذا كنت عززت ب 2 لوت اولا ( التعزيز الاول ) فيكون فى (التعزيز الثانى) 4 لوت
2- بعض الاحيان لا يفرق في الايام من حيث الرينج اليومي (( وهذه اساس الاستراتجية - الرينج كل 24 ساعة ) حيث عند تفعيل او اغلاق متغير الرينج اليومي Use Time Filter
يقوم أحياناً بأخذ (التعزيز الثاني ) للصفقة الاولى بمعنى 4 اضعاف ( الصفقة الاولى ) حسب هذا المثال من الباك تيست
يوجد المرفق لاخر نسخة من الاكسبيرت وشرح التعديل في الصفحة الاولى مشاركة رقم 4
ولك مني فائق الاحترام والتقدير وانا اسف جدا على ازعاجك
السلام عليكم
بالنسبة لكود التيك بروفت ده
ده مثلا كود التيك بروفت للشراءكود PHP:double Low_Diff=MathAbs(ZigZag_Low(1)-ZigZag_Low(2));
MathMin(ZigZag_Low(1),ZigZag_Low(2))+(Low_Diff*210)/100;
(على أساس إن التيك بروفت هيتحدد عن طريق طرح قيمة أخر قاعيين على الزجزاج وضربها ×180 % وإضافتها على القاع الأعلى )
المشكلة دلوقتي إن لو القاع إتغير التيك بروفت بيتغير
إية الحل عشان أثبت التيك بروفت
استاذ اسامة
لديا سؤال برمجى اذا سمحت
هل يمكن برمجيا ان يتم عمل اكسبيرت يوقف الحساب عند خسارة محددة بالنسبة المؤيه ولاكن عند حدوث الخسارة المحددة له لايمكن فتح اى صفقات اخرى على هذا الحساب حتى تغير قيمة معينة مثلا فى مدخلات الاكسبيرت
وعليكم السلام ورحمة الله وبركاته
الفكره ستنفذها على حسب طريقة عمل الإكسبرت وحاجتك لتحديد الهدف
إذا كنت مثلا تريد حفظ الهدف بحيث لا يتغير عند فتح الصفقه فجرب أن تقوم بتسمية متغير وتعطيه قيمة الهدف عند فتح الصفقه بحيث لا يتغير إلا عند فتح صفقه مره أخرى
أو يمكنك إستخدام GlobalVariableSet
أسف بس ممكن توضيح أكتر
وأسف مرة تانية لإني لسه أخد بالي دلوقي إن سؤالي كان ناقص والكود كان ناقص كمان
----------------------
ده كود تحديد سعر الشراء
وده كود تحديد هدف الشراءكود PHP:double Low_Diff=MathAbs(ZigZag_Low(1)-ZigZag_Low(2));
double Buy_Price=MathMin(ZigZag_Low(1),ZigZag_Low(2))+(Low_Diff*140)/100;
وده أمر الشراءكود PHP:double B_TP180=MathMin(ZigZag_Low(1),ZigZag_Low(2))+(Low_Diff*180)/100;
يبقى التعديل هيكون إزايكود PHP:Ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Buy_Price,digits),3,NormalizeDouble(SL,digits),NormalizeDouble(B_TP180,digits),"YousefH",MagicNumber,0,Blue);
GlobalVariableSet("Lots"+Symbol()+Period()+Ticket,Lots);
ولو مش هتقل عليك
ممكن تشوف سؤالي في الموضوع ده
https://forum.arabictrader.com/t142299.html
السلام عليكم يا أستاذ أسامه
تم توضيح عمل المؤشر وكل متغيراته لمؤشر المتاجره الزمنيه السعريه ، برجاء المتابعه
شكرا مقدما
بارك الله فيك أستاذي الكريم وجزاك الله خيرا :eh_s(7):
عندي إستفسار لو تسمح لي
أولا لنفرض بأنه تم وضع الإكسبريت على الشارت الأن هنا FirstTime ستأخذ توقيت
إذا بمعنى أخر ستعود بالتوقيت الحاليكود PHP:Time[0]
و هنا
لأنه لم تفتح أي صفقة بعد ثم إذا فتحت صفقة ستكونكود PHP:LastOpenedOrder()=FirstTime
لحد الأن كل شيء مفهومكود PHP:LastOpenedOrder()=OrderOpenTime()
ثم في الدالة الثانية
عملت
إذا الدالة ستعمل فقط بعد تكون شمعة جديدةكود PHP:for(int i=1;i<Bars;i++){
ثم إستدعينا الموفينج أفرج لإستخراج التقاطعات
ثم هنا لم أفهم :doh:كود PHP:double ma1,ma2,ma11,ma22;
ma1=iMA(NULL,0,MA1_Period,0,MA1_Method,MA1_Price,i);
ma11=iMA(NULL,0,MA1_Period,0,MA1_Method,MA1_Price,i+1);
ma2=iMA(NULL,0,MA2_Period,0,MA2_Method,MA2_Price,i);
ma22=iMA(NULL,0,MA2_Period,0,MA2_Method,MA2_Price,i+1);
بماذا ستعودكود PHP:if(Time[i]<LastOpenedOrder())return(Opened);
يعني إذا كانت قيمة Bars =100 و قيمة i = 99كود PHP:Time[i]
لمذا يهمنا هذا التوقيت
ولمذا يوجدكود PHP:Time[99]
مرتين في الدالةكود PHP:return(Opened)
ولنفرض أنه تحقق تقاطع شراء كيف أستخرج إن كانت هذه الصفقة الإفتراضية رابحة أم خاسرة عملت هذا الكود هل هذا صحيح ... عندما أضفته للدالة الثانية ظهرت أخطاء لم أجد مصدرها
أرجو التوضيح أستاذ أسامة و بارك الله فيك :eh_s(7):كود PHP:if (ma22<ma11&&ma2>ma1) B_Bid = Bid;
if (Bid <= xBid-StopLoss*Q) B_Ord ="loss";
if (Bid >= xBid+TakeProfit*Q) B_Ord ="Profit";
if (ma22>ma11&&ma2<ma1) S_Bid = Bid;
if (Bid >= S_Bid + StopLoss*Q) S_Ord ="loss";
if (Bid <= S_Bid - TakeProfit*Q ) S_Ord ="Profit";
أولا
Time سوف تعود بقيمة توقيت الشمعه المحدده و أنا إستخدمت الشرط بحيث نحن نريد جميع التقاطعات التي كانت بعد فتح آخر صفقه بالتالي إذا كان توقيت إفتتاح هذه الشمعه أقل من توقيت إفتتاح آخر صفقة فسوف ينهي الداله ويعود بقيمة Opened وهذا يفسر سبب إستخدامي للأمر return مرتين أيضاكود PHP:if(Time[i]<LastOpenedOrder())return(Opened);
أما لتحديد هل حققت الصفقه الهدف أم الخساره فالأمر أصعب قليلا
أولا ستحتاج مره أخرى إلى البحث في الشموع التي بعد التقاطع
سوف يبحث من شمعة التقاطع حتى الشمعه رقم 1كود PHP:for(int j=i;j>0;j--)
{
if (ma22<ma11&&ma2>ma1)
{
if(High[j]>Open[i]+TakeProfit*point){
Positive++;
break;
}
if(Low[j]<Open[i]-StopLoss*point){
Negative++;
break;
}
}
if (ma22>ma11&&ma2<ma1)
{
if(High[j]>Open[i]+StopLoss*point){
Negative++;
break;
}
if(Low[j]<Open[i]-TakeProfit*point){
Positive++;
break;
}
}
}
ثم يتأكد من نوع التقاطع هل هو شراء أم بيعكود PHP:for(int j=i;j>0;j--)
فإذا كان شراء سوف يقارن هل الهاي للشمعه حقق الهدف أو اللو وصل إلى الإستوب لوز أي أعلى وأدني سعركود PHP:if (ma22<ma11&&ma2>ma1)
{
فإذا حقق الهدف تزيد قيمة Positive وإذا ضرب الإستوب تزيد قيمة Negative
ثم ينهي البحث break ويبحث عن تقاطع آخر
كود PHP:if(High[j]>Open[i]+TakeProfit*point){
Positive++;
break;
}
if(Low[j]<Open[i]-StopLoss*point){
Negative++;
break;
}