رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة fxsmartsniper
تم ارفاقها مرة اخري
مع العلم ايضا انه بمجرد فتح الميتا يقوم الاكسبرت بدخول صفقة في كل مرة تفتح فيها المنصة
برجاء حل هاتين المشكلتين
نص الخطا
invalid ticket for order modify function
ودا رابط الصورة علي الميديا فير
http://www.mediafire.com/?2arnkuikqx24ra4
هذا الخطأ سيحدث عندما يحاول الإكسبرت عمل مودفاي للأمر ولكن أحيانا لا يفتح الأمر ويحدث خطأ بالتالي لا يستطيع عمل مودفاي له
لذلك ضع الشرط
كود PHP:
if(Ticket>0)OrderModify(Ticket,OrderOpenPrice(),SL,TP,0);
أيضا في شروط أوامر المضاعفات ضع شرط
حتى لا يقوم بالمضاعفات إلا بعد إغلاق الصفقه الخاسره المفتوحه إذا كان يوجد
بالنسبه لفتح الصفقه بمجرد فتح الميتاتريدر يمكنك إضافة شرط
كود PHP:
&&High[0]==Low[0]
حتى تتأكد من عدم فتح الصفقات إلا عند بداية الشمعه التي تتحقق عندها الشرط فقط
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة ahmadwalwil
السلام عليكم
اخ اسامه اردت ان اسالك اذا كنت عامل اكسبرت من قبل بالمواصفات التاليه واذا ما كنت عامل يا ريت تعطيني اقرب واحد الو
اعتماده يكون على الموفنج افرج للحاق بالسعر ويكون على كذا عمله مع مضاعفات لكن اريده ان يشتغل بعد عدد معين من التقاطعات الخاطئه يعني
لو مثلا التقاطع الاول خسران والثاني طلع خسران يبدأ عمل الاكسبرت نشالله انو يكون في مكتبتك
لك جزيل الشكر
وعليكم السلام ورحمة الله وبركاته
يوجد إكسبرت موفينج مع المضاعفات لكن لا يوجد به خاصية الدخول بعد عدد معين من الخساره
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة Jmeel
السلام عليكم ورحمة الله
أستاذي الفاضل ماهو الكود الذي يجعلني انفذ أمر شراء لمرة واحدة فقط ايا كانت حالة العقود . كمثال عملت دالتين تحسب عقود الشراء وعقود البيع المفعلة وكان شرطي للأكسبيرت اذا الشراء اكبر من البيع نفذ امر شراء اضافي لمرة واحدة فقط هذا كمثال ، فواجهتني مشكلة ان اوامر الشراء بأستمرار ستكون اكبر وبالتالي سينفذ حلقة اوامر شراء بدون توقف .
وعليكم السلام ورحمة الله وبركاته
يمكنك تعريف متغير مثلا عندما يتحقق شرط فتح الأمر الإضافي تجعل قيمة المتغير = 1
وبعد أن تنفذ أمر فتح الصفقه تجعل قيمة المتغير مره أخرى = 0
مثال
كود PHP:
static int OpenOrder;
if(OpenOrder==1)
{
// buy
OpenOrder=0;
}
if(Condition==true)
{
Openorder=1;
}
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
وعليكم السلام ورحمة الله وبركاته
يمكنك تعريف متغير مثلا عندما يتحقق شرط فتح الأمر الإضافي تجعل قيمة المتغير = 1
وبعد أن تنفذ أمر فتح الصفقه تجعل قيمة المتغير مره أخرى = 0
مثال
كود PHP:
static int OpenOrder;
if(OpenOrder==1)
{
// buy
OpenOrder=0;
}
if(Condition==true)
{
Openorder=1;
}
بارك الله فيك أستاذ مستر دولار
كنت أبحث عن هذا الحل...
لنفترض دخول صفقة بعد تقاطع موفينجين بهدف وستوب تابثين
ما يحدث هو عند ضرب الهدف أو الستوب تفتح صفقة أخرى وهكذا... وأنا أريد صفقة واحدة ولا يفتح صفقة أخرى إلا بعد تحقق تقاطع جديد
إذا كان الكود بمشاركتك سيحل المشكلة، فأرجو أن تضيفه لي بالمثال المرفق لمعرفة الطريقة
شكرا جزيلا أستاذي القدير :eh_s(7):
كود PHP:
void TechnicalAnalysis()
{
if (iMA(NULL, NULL,Periode1,0,MODE_EMA,PRICE_CLOSE,0) < iMA(NULL, NULL,Periode2,0,MODE_EMA,PRICE_CLOSE,1))
{
BuyOrder();
}
}
void BuyOrder()
{
int expire = TimeCurrent();
double price = NormalizeDouble(Ask, NDigits);
double SL = price - Stoploss*PipValue*Point;
if (Stoploss == 0) SL = 0;
double TP = price + Takeprofit*PipValue*Point;
if (Takeprofit == 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, Red);
if (ret == false)
Print("OrderModify() error - ", ErrorDescription(GetLastError()));
}
}
else
{
Print("OrderSend() error - ", ErrorDescription(GetLastError()));
}
}
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
وعليكم السلام ورحمة الله وبركاته
يمكنك تعريف متغير مثلا عندما يتحقق شرط فتح الأمر الإضافي تجعل قيمة المتغير = 1
وبعد أن تنفذ أمر فتح الصفقه تجعل قيمة المتغير مره أخرى = 0
مثال
كود PHP:
static int OpenOrder;
if(OpenOrder==1)
{
// buy
OpenOrder=0;
}
if(Condition==true)
{
Openorder=1;
}
أستاذي حاولت لكن لم استطع وضع الكود في مكانه الصحيح لقلة الخبرة لأنه لم يأثر في النتيجة ، وارفقت لك الأكسبيرت ووضعت // ssssssssssssssss
لتسهيل وصولك الى مناطق وضعت فيها الكود ، برجاء التصحيح حفظك الله .
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة kira-h
بارك الله فيك أستاذ مستر دولار
كنت أبحث عن هذا الحل...
لنفترض دخول صفقة بعد تقاطع موفينجين بهدف وستوب تابثين
ما يحدث هو عند ضرب الهدف أو الستوب تفتح صفقة أخرى وهكذا... وأنا أريد صفقة واحدة ولا يفتح صفقة أخرى إلا بعد تحقق تقاطع جديد
إذا كان الكود بمشاركتك سيحل المشكلة، فأرجو أن تضيفه لي بالمثال المرفق لمعرفة الطريقة
شكرا جزيلا أستاذي القدير :eh_s(7):
كود PHP:
void TechnicalAnalysis()
{
if (iMA(NULL, NULL,Periode1,0,MODE_EMA,PRICE_CLOSE,0) < iMA(NULL, NULL,Periode2,0,MODE_EMA,PRICE_CLOSE,1))
{
BuyOrder();
}
}
void BuyOrder()
{
int expire = TimeCurrent();
double price = NormalizeDouble(Ask, NDigits);
double SL = price - Stoploss*PipValue*Point;
if (Stoploss == 0) SL = 0;
double TP = price + Takeprofit*PipValue*Point;
if (Takeprofit == 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, Red);
if (ret == false)
Print("OrderModify() error - ", ErrorDescription(GetLastError()));
}
}
else
{
Print("OrderSend() error - ", ErrorDescription(GetLastError()));
}
}
لن تحتاج هذا الكود
لكن ستحتاج فقط إلى تعديل الشروط أنت تريد الدخول بعد تقاطع خطي الموفينج لذلك ستقوم بتعديل الشروط بحيث تقارن بين الموفينج في الشمعه السابقه والشمعه التاليه وتتأكد من التقاطع
مثال
كود PHP:
void TechnicalAnalysis()
{
if (iMA(NULL, NULL,Periode1,0,MODE_EMA,PRICE_CLOSE,1) < iMA(NULL, NULL,Periode2,0,MODE_EMA,PRICE_CLOSE,1)&&
iMA(NULL, NULL,Periode1,0,MODE_EMA,PRICE_CLOSE,1) > iMA(NULL, NULL,Periode2,0,MODE_EMA,PRICE_CLOSE,1))
{
BuyOrder();
}
}
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة ahmadwalwil
الف شكر لك اخ اسامه على الاكسبرت الاكثر من رائع ويا ريت تساعدني في عمل داله لمعرفه متى يتكون تقاطعين خاطئين لزياده احتمال التاكيد اذا تكرمت
الاكسبرت يشتغل على الباك تست ولكن عند وضعه على حساب ديمو لا ياخذ عقود لكن هذا ليس مهم كالداله وما يجيبها غير رجالها مشكور
تأكد من تفعيله بشكل صحيح وسوف يعمل وتأكد من عدم وجود أخطاء تظهر عند عمل الإكسبرت
بالنسبه للداله فيمكنك عملها بالشكل الآتي
كمثال على الإكسبرت السابق
قمت أولا بتعريف متغير خارجي لتحديد عدد الخساره اللازمه لفتح صفقه
كود PHP:
extern int LostNumber=2;
قمت بتعريف مصفوفه أقوم بحفظ بيانات فتح الصفقه الوهميه بها
كود PHP:
double order[1][4];
ثم جعلت الكود
بالنسبه للشراء
كود PHP:
if ((ma22<=ma11&&ma2>ma1)&&Time0!=Time[0] ){
if(orderscnt()<1){
if(StopLoss==0){SL=0;}else{SL=Ask-StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*point;}
if(Lost>=LostNumber){
OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,digits),3*Q,SL,TP,"MR.dollar EA",MagicNumber,0,Blue);
order[0][0]=0;
Lost=0;
}
else {
order[0][0]=1;
order[0][1]=Ask;
order[0][2]=SL;
order[0][3]=TP;
}
PlaySound("Alert.wav");
Time0=Time[0];
}
}
وبالنسبه للبيع
كود PHP:
if ((ma22>=ma11&&ma2<ma1)&&Time0!=Time[0] ){
if(orderscnt()<1){
if(StopLoss==0){SL=0;}else{SL=Bid+StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*point;}
if(Lost>=LostNumber){
OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,digits),3*Q,SL,TP,"MR.dollar EA",MagicNumber,0,Red);
order[0][0]=0;
Lost=0;
}
else {
order[0][0]=2;
order[0][1]=Ask;
order[0][2]=SL;
order[0][3]=TP;
}
PlaySound("Alert.wav");
Time0=Time[0];
}
}
ثم أضفت شروط حساب الصفقه الوهميه
كود PHP:
if(order[0][0]==1)
{
if(Bid>=order[0][3])
{
// tp reached
Lost=0;order[0][0]=0;
}
if(Bid<=order[0][2])
{
//sl reached
Lost++;order[0][0]=0;
}
}
if(order[0][0]==2)
{
if(Ask<=order[0][3])
{
// tp reached
Lost=0;order[0][0]=0;
}
if(Ask>=order[0][2])
{
//sl reached
Lost++;order[0][0]=0;
}
}
مرفق الإكسبرت بعد التعديل
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
هذا الخطأ سيحدث عندما يحاول الإكسبرت عمل مودفاي للأمر ولكن أحيانا لا يفتح الأمر ويحدث خطأ بالتالي لا يستطيع عمل مودفاي له
لذلك ضع الشرط
كود PHP:
if(Ticket>0)OrderModify(Ticket,OrderOpenPrice(),SL,TP,0);
أيضا في شروط أوامر المضاعفات ضع شرط
حتى لا يقوم بالمضاعفات إلا بعد إغلاق الصفقه الخاسره المفتوحه إذا كان يوجد
بالنسبه لفتح الصفقه بمجرد فتح الميتاتريدر يمكنك إضافة شرط
كود PHP:
&&High[0]==Low[0]
حتى تتأكد من عدم فتح الصفقات إلا عند بداية الشمعه التي تتحقق عندها الشرط فقط
قمت مستر دولار بالتعديل في النسخة 4.2
ولا يوجد اي اخطاء ومع ذلك لايدخل صفقات بتحقق شروط التقاطع وفي مرة وحيدة دخل صفقة
برجاء مراجعة الكود في الاكسبرت
وهل ممكن عدم دخول صفقات ان خاصية الانزلاق او slippage غير موجودة ام هناك خطا بالفعل في التعديل؟
شكرا استاذنا الغالي & تحياتي