رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة ساهر الفوركس
بارك الله فيك اخي اسامة
انا حاولة استعمل هذه الدوال ولم ينجح الامر
بالمختصر
انا اريد كود اكسبريت لفتح 3 صفقات اوامر معلقة في نفس الوقت
مثلا 2 buy وواحد sell
هناك مسافة بين صفقات buy
اذا تحقق اول هدف ل buy اغلق صفقة buy واترك باقي الصفقتين
اذا تحقق الهدف الثاني ل buy اغلق جميع الصفقات
إذا كان عدد الأوامر المعلقه ثابت فالفكره ستكون أسهل ويمكنك إعتماد على شروط عدد الأوامر المعلقه فقط
ستستخدم دالتين واحده لمعرفة عدد الأوامر المعلقه وواحده لمعرفة هل الصفقه المغلقه حققت الهدف أم لا
كود 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() && MagicNumber==OrderMagicNumber()&&OrderType()==type){
cnt++;
}
}
}
return(cnt);
}
double LastOrderProfit(int type)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
return(OrderProfit());
}
return(0);
}
مثلا عند تحقق أول هدف لصفقة الشراء أغلق صفقة الشراء وترك البيع
كود PHP:
if(orderscnt(OP_BUYSTOP)==1&&LastOrderProfit(OP_BUY)>0)
{
// delete buystop
}
عند تحقق الهدف الثاني للشراء يغلق جميع الصفقات
كود PHP:
if(orderscnt(OP_BUYSTOP)==0&&LastOrderProfit(OP_BUY)>0)
{
// delete buystop
}
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم و رحمة الله و بركاته
ما هو الكود الذي يعرض ايداع الحساب على صورة تكست ؟
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MohamedEgyForex
السلام عليكم و رحمة الله و بركاته
ما هو الكود الذي يعرض ايداع الحساب على صورة تكست ؟
وعليكم السلام ورحمة الله وبركاته
لمعرفة الإيداع الأصلي في الحساب سوف تطرح الحساب الحالي - الربح المحقق
كود PHP:
double deposite=AccountBalance()-AccountProfit();
أما بالنسبه لطريقة العرض فالطريقه الأولى كومنت أعلى يسار الشاشه
كود PHP:
Comment(deposite);
الطريقة الثانيه إذا كنت تريد عرضه كنص
كود PHP:
double deposite=AccountBalance()-AccountProfit();
create("deposite","Deposite:"+DoubleToStr(deposite,2),Red,5,5,0,12);
void create(string name, string text, color color., int X, int Y,int Corner,int Size) {
if (ObjectFind(name) != -1) ObjectDelete(name);
ObjectCreate(name, OBJ_LABEL, 0, 0, 0);
ObjectSet(name, OBJPROP_CORNER, Corner);
ObjectSet(name, OBJPROP_COLOR, color.);
ObjectSet(name, OBJPROP_XDISTANCE, X);
ObjectSet(name, OBJPROP_YDISTANCE, Y);
ObjectSetText(name, text, Size, "Arial", color.);
}
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم وتحية طيبة للجميع
مستر دولار أساتذي العزيز أريد حل للمشكلة دي، ربنا يكرمك
عند تفعيل الاكسبيرت بالحساب الحقيقي ECN لم يظهر أي خطأ بالجورنال وظهر الخطأ ده ب الاكسبيرتس رغم أن التجربة بدون هدف وبدون ستوب والبروكر يقبل فرق الأوامر 10 نقاط :
كود PHP:
OrderSend() error - expirations are denied by broker
والغريبة أنه يعمل على الديمو بدون مشاكل
وجربت اكسبيرت الأوامر المعلقة تبعك MR.dollar_Pending Orders EA V4.6 يعمل جيدا على الحقيقي بنفس المنصة
فأكيد الخطأ البرمجي عندي وليس بالشركة :no3:
أرجوك أخي الغالي حل المشكلة ضمنيا بالاكسبيرت للاستفادة والتعلم
وجزاك الله عنا كل خير:)
رد:موضوع مخصص للأسئلة البرمجية
علما أني عملت محاولة بحدف الكود الخاص بانتهاء صلاحية الأمر المعلق expiration
ونفس الخطأ
تم استبدلت المقطع الأخير من كود الأمر المعلق بالتالي
كود PHP:
if (ticket <0)
{
Print("OrderSend failed with error #",GetLastError());
return(0);
}
}
ولم تتفعل الأوامر مع خطأ بالاكسبيرتس
كود PHP:
OrderSend failed with error #147
OrderSend error 147, it means that your broker is not supporting expirations
:doh:
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة kira-h
علما أني عملت محاولة بحدف الكود الخاص بانتهاء صلاحية الأمر المعلق expiration
ونفس الخطأ
تم استبدلت المقطع الأخير من كود الأمر المعلق بالتالي
كود PHP:
if (ticket <0)
{
Print("OrderSend failed with error #",GetLastError());
return(0);
}
}
ولم تتفعل الأوامر مع خطأ بالاكسبيرتس
كود PHP:
OrderSend failed with error #147
OrderSend error 147, it means that your broker is not supporting expirations
:doh:
أنت جعلت الأمر المعلق بدون وضع مكان تاريخ الإنتهاء للأمر
كود PHP:
int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, "My Expert", MagicNo, Blue);
هل عندما تضع 0 مكان تاريخ الإنتهاء تحدث نفس المشكله
مثل
كود PHP:
int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, "My Expert", MagicNo,0, Blue);
لأن الكود الثاني هو الصحيح
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
أنت جعلت الأمر المعلق بدون وضع مكان تاريخ الإنتهاء للأمر
كود PHP:
int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, "My Expert", MagicNo, Blue);
هل عندما تضع 0 مكان تاريخ الإنتهاء تحدث نفس المشكله
مثل
كود PHP:
int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, "My Expert", MagicNo,0, Blue);
لأن الكود الثاني هو الصحيح
بارك الله فيك أستاذي
نعم يحدث نفس الخطأ وأنا حدفته لأني فهمت من اسم الخطأ 147 أن البروكر لا يقبل تاريخ الصلاحية للأوامر !!!
وكمان كان في مكان 0 متغير بإسم expiration وموجود خارجيا غيرته إلى 30 و 60 ونفس الخطأ
وعدلت الكود كالتالي
كود PHP:
void SellPendingOrder49()
{
double price = NormalizeDouble(Close[1], NDigits) - 11*PipValue*Point;
double SL = price + Stoploss*PipValue*Point;
if (Stoploss == 0) SL = 0;
double TP = price - Takeprofit*PipValue*Point;
if (Takeprofit == 0) TP = 0;
int ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, price, Slippage, SL, TP, "My Expert", MagicNo,0, Red);
if (ticket > -1)
{
Print("OrderSend() error - ", ErrorDescription(GetLastError()));
}
}
يتفعل الأمر المعلق ثم يغلق في أقل من ثانية
غيرت الـ 0 إلى 60 و إلى 30 ولم تتفعل الصفقة المعلقة
كما حدفت الستوب والهدف من الكود ونفس المشكلة لا توجد استجابة
الاكسبيرت الذي يفعل الأمر المعلق ثم يختفي بالمرفقات
بانتظارك أخي العزيز :asvc:
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
وعليكم السلام ورحمة الله وبركاته
لمعرفة الإيداع الأصلي في الحساب سوف تطرح الحساب الحالي - الربح المحقق
كود PHP:
double deposite=AccountBalance()-AccountProfit();
أما بالنسبه لطريقة العرض فالطريقه الأولى كومنت أعلى يسار الشاشه
كود PHP:
Comment(deposite);
الطريقة الثانيه إذا كنت تريد عرضه كنص
كود PHP:
double deposite=AccountBalance()-AccountProfit();
create("deposite","Deposite:"+DoubleToStr(deposite,2),Red,5,5,0,12);
void create(string name, string text, color color., int X, int Y,int Corner,int Size) {
if (ObjectFind(name) != -1) ObjectDelete(name);
ObjectCreate(name, OBJ_LABEL, 0, 0, 0);
ObjectSet(name, OBJPROP_CORNER, Corner);
ObjectSet(name, OBJPROP_COLOR, color.);
ObjectSet(name, OBJPROP_XDISTANCE, X);
ObjectSet(name, OBJPROP_YDISTANCE, Y);
ObjectSetText(name, text, Size, "Arial", color.);
}
السلام عليكم
Account Balance
الرصيد الحالى
Account Profit
تظهر الربح من الصفقات المفتوحة فقط
هذا الكود
كود PHP:
double deposite=AccountProfit();
Comment(deposite);
لذلك لا تعمل تلك المعادلة لحساب الايداع ارجو الافادة
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MohamedEgyForex
السلام عليكم
Account Balance
الرصيد الحالى
Account Profit
تظهر الربح من الصفقات المفتوحة فقط
هذا الكود
كود PHP:
double deposite=AccountProfit();
Comment(deposite);
لذلك لا تعمل تلك المعادلة لحساب الايداع ارجو الافادة
وعليكم السلام ورحمة الله وبركاته
نعم يبدو أن فهمت سؤالك خطأ
ستستخدم نفس الطريقة السابقه لكن ستحتاج لعمل دالة لمعرفة الربح المحقق في الحساب للصفقات التي أغلقت وليس الصفقات المفتوحه
فيمكنك عمل داله لحساب الربح في الصفقات المغلقه
كود PHP:
double Profit()
{
double profit;
for(int i=0;i<OrdersHistoryTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
profit+=OrderProfit();
}
return(profit);
}
ثم ستستخدم نفس الطريقة تطرح الرصيد الحالي - الربح المحقق
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة kira-h
عزيزي كيرا الأكسبيرت شغال كويس وسبب اختفاء الأوامر هو استخدامك لأمر ObjectsDeleteAll في دالة deinit .
2 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
لا يوجد خطأ في كود الإكسبرت
0 تعني عدم تحديد تاريخ صلاحية للأمر المعلق
بالإضافة إلى أن الإكسبرت كما تقول يعمل على الديمو بدون مشاكل ربما كانت مشكله مؤقته حدثت من البروكر جرب تشغيله على بروكر آخر
تمام
بارك الله فيك أستاذي الكريم :)
التعديل المقترح من الأستاذ جميل بارك الله فيه اشتغل تمام على الحقيقي و يفتح الأوامر المعلقة كما أريد
والان أضفت أمر ماركت وليس معلق
كود PHP:
void BuyOrder78()
{
double SL = Ask - Stoploss*PipValue*Point;
if (Stoploss == 0) SL = 0;
double TP = Ask + Takeprofit1*PipValue*Point;
if (Takeprofit1 == 0) TP = 0;
int ticket = -1;
if (ECNBroker)
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "My Expert", MagicNo, 0, Blue);
else
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, SL, TP, "My Expert", MagicNo, 0, Blue);
if (ticket > -1)
{
if (ECNBroker)
{
OrderSelect(ticket, SELECT_BY_TICKET);
bool ret = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Blue);
if (ret == false)
Print("OrderModify() error - ", ErrorDescription(GetLastError()));
}
}
else
{
Print("OrderSend() error - ", ErrorDescription(GetLastError()));
}
}
بالمرفقات الاكسبيرت المعدل من طرف الأخ الكريم جميل (1)
ونسخة منه بعد إضافة الأمر الماركت به شرط مودفاي للصفقة بعد تفعيلها لأن الحقيقي ECN ..
الاكسبيرت باسم 4
المشكلة الان يفتح الاكسبيرت صفقة ماركت ولا يفتح معه الأوامر المعلقة ، لا أعرف لما وأين الخلل
فالمرجو التكرم بالمراجحة وحل المشكلة جزاك الله خيرا
تحية ود وتقدير :eh_s(7):