وعليكم السلام ورحمة الله وبركاته
بدلا من إستدعاء قيمة المؤشر بناء على الشمعه رقم 0 قم بإستدعائه على الشمعه رقم 1
Printable View
وعليكم السلام ورحمة الله وبركاته
بالنسبه للمشكله الأولى فيمكنك عمل متغير تكتب به جميع الأزواج التي تريد عدم نسخها وضع بينهم علامة مميزه مثلا فاصله ,
ثم في OnInit إستخدم الدالهكود PHP:string not_copy_symbols="EURUSD,USDCHF,USDJPY";
بالتالي سوف ينتج عندك مصفوفه تحتوي على العملات التي لا تريد نسخها يمكنك إستخدامها في المقارنهكود PHP:
string not_copy_array[];
StringSplit(to_split,StringGetCharacter(",",0),not_copy_array);
حل آخر واسهل
بدلا من إستخدام المقارنه == يمكنك إستخدام الداله StringFind للبحث في نص معين بالتالي يمكنك كتابة أكثر من عمله في نفس المتغير
بالنسبه للمشكله الثانيه سوف تستخدم نفس الداله StringFind أيضا للبحث في الكومنت بدلا من المقارنه الصريحهكود PHP:string NotCopy_List="EURUSD,USDCHF,USDJPY";
if(StringFind(NotCopy_List,symbol,0)>=0)continue;
السلام عليكم ورحمة الله
هذا اجتهاد لرسم خطوط مع مستويات الفيبو ولكن في بعض الازواج الخطوط لا تكون دقيقه مع مستويات الفيبو بفارق عدة نقاط
اين الخطأ جزاكم الله خير
كود PHP:
double UP=ObjectGet("FiboUp",OBJPROP_PRICE1);
double DOW=ObjectGet("FiboDn",OBJPROP_PRICE1);
double AA=ObjectGet("FiboIn",OBJPROP_PRICE1);
double SP=MathAbs(UP-AA)/pt;
int SP1=(int)SP/4;
double DOW1=DOW+(SP1*2*pt);
double DOW_0=DOW+(SP1*4*pt);
double DOW_50=DOW+(SP1*6*pt);
لـو سمحت ممكن أعرف المشكلة فى الكود دة:
كود PHP:
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
#property indicator_chart_window
input int NumOfMAPeriod = 3;
int init()
{
return(0);
}
int start()
{
//---
int limit;
int counted_bars=IndicatorCounted();
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- the last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//---- main loop
for(int i=0; i<limit; i++)
{
Print("test= ",test(NumOfMAPeriod));
}
return(0);
}
double test(int number){
double qr[];
double re = 0;
for(int i=0;i<number;i++)
{
qr[i] = 5;
}
for(int i=0;i<number;i++)
{
re += qr[i];
}
return(re);
}
بيدينى خطأ:
كود PHP:array out of range
فى السطر اللى فية:
كود PHP:qr[i] = 5;
السلام عليكم ورحمة الله وبركاته، تحياتي للجميع
قمت بعمل شروط لإضافتها إلى إكسبرت
هدف هذه الشروط البحث عن أي صفقة يتم فتحها من خلال الإكسبرت ويكون الهدف فيها أقل من الاستوب
ثم تعديل الهدف لتجعله مساوي للاستوب
أرجو من الخبراء مراجعتها لمعرفة إذا كان بها أي أخطاء برمجية
وشكرًا جزيلا لكم
مع ملاحظة أن:
TotalOrders
LastOrderInfo
هي دوال خارج دالة start
كود PHP:double tp;
double sl;
double takeprofite;
double stoploss;
//----------------------------
//
//----------------------------
if(TotalOrders(OP_BUY)== 1){
tp = LastOrderInfo("TP") - LastOrderInfo("Price"); // عدد نقاط البروفيت
sl = LastOrderInfo("Price") - LastOrderInfo("SL"); // عدد نقاط الاستوبلوز
if (tp < sl)
{
takeprofite = LastOrderInfo("Price") + sl;
stoploss = LastOrderInfo("SL");
modify = OrderModify(ticket,OrderOpenPrice(),stoploss,takeprofite,0);
}
}
//----------------------------
//
//----------------------------
if(TotalOrders(OP_SELL)==1){
tp = LastOrderInfo("TP") - LastOrderInfo("Price") * (-1); // عدد نقاط البروفيت
sl = LastOrderInfo("Price") - LastOrderInfo("SL") * (-1); // عدد نقاط الاستوبلوز
if (tp < sl)
{
takeprofite = LastOrderInfo("Price") - sl;
stoploss = LastOrderInfo("SL");
modify = OrderModify(ticket,OrderOpenPrice(),stoploss,takeprofite,0);
}
}
كود معدل
كود PHP:double tp;
double sl;
double takeprofite;
double stoploss;
double tpMulti = 1.5;
//----------------------------
//
//----------------------------
if(TotalOrders(OP_BUY)== 1){
tp = LastOrderInfo("TP") - LastOrderInfo("Price"); // عدد نقاط البروفيت
sl = LastOrderInfo("Price") - LastOrderInfo("SL"); // عدد نقاط الاستوبلوز
if (tp < sl)
{
takeprofite = LastOrderInfo("Price") + (sl*tpMulti);
stoploss = LastOrderInfo("SL");
modify = OrderModify(ticket,OrderOpenPrice(),stoploss,takeprofite,0);
}
}
//----------------------------
//
//----------------------------
else if(TotalOrders(OP_SELL)==1){
tp = LastOrderInfo("TP") - LastOrderInfo("Price") * (-1); // عدد نقاط البروفيت
sl = LastOrderInfo("Price") - LastOrderInfo("SL") * (-1); // عدد نقاط الاستوبلوز
if (tp < sl)
{
takeprofite = LastOrderInfo("Price") - (sl*tpMulti);
stoploss = LastOrderInfo("SL");
modify = OrderModify(ticket,OrderOpenPrice(),stoploss,takeprofite,0);
}
}
else {
takeprofite = LastOrderInfo("TP");
stoploss = LastOrderInfo("SL");
modify = OrderModify(ticket,OrderOpenPrice(),stoploss,takeprofite,0);
}
هذا مثال لدالة تحسب عدد الصفقات المفتوحه
ثم يمكنك وضع الشرط قبل الدخول في الصفقهكود PHP:int TotalOrders(int type=-1)
{
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||type==-1)){
cnt++;
}
}
}
return(cnt);
}
كود PHP:if(TotalOrders()<MaxOpenTrades)
شكرًا لحسن ردك مستر دولار الغالي
هذا هو كود دالة ستارت السابق مع بعض التعديل
وهذه الدوال خارج دالة ستارتكود PHP:/*
//-----
//تعديل الهدف في حال ما إذا كان قيمة الهدف أقل من قيمة الاستوب لوز
//---------------------------------------------
double tp;
double sl;
double takeprofite;
double stoploss;
bool mmodify;
double tpMulti = 1.5;
//----------------------------
//
//----------------------------
if(TotalOrders2(OP_BUY)== 1){
tp = LastOrderInfo2("TP") - LastOrderInfo2("Price"); // عدد نقاط البروفيت
sl = LastOrderInfo2("Price") - LastOrderInfo2("SL"); // عدد نقاط الاستوبلوز
if (tp < sl)
{
takeprofite = LastOrderInfo2("Price") + (sl*tpMulti);
stoploss = LastOrderInfo2("SL");
mmodify = OrderModify(ticket,OrderOpenPrice(),stoploss,takeprofite,0);
}
}
//----------------------------
//
//----------------------------
else if(TotalOrders2(OP_SELL)==1){
tp = LastOrderInfo2("TP") - LastOrderInfo2("Price") * (-1); // عدد نقاط البروفيت
sl = LastOrderInfo2("Price") - LastOrderInfo2("SL") * (-1); // عدد نقاط الاستوبلوز
if (tp < sl)
{
takeprofite = LastOrderInfo2("Price") - (sl*tpMulti);
stoploss = LastOrderInfo2("SL");
mmodify = OrderModify(ticket,OrderOpenPrice(),stoploss,takeprofite,0);
}
}
else {
takeprofite = LastOrderInfo2("TP");
stoploss = LastOrderInfo2("SL");
mmodify = OrderModify(ticket,OrderOpenPrice(),stoploss,takeprofite,0);
}
*/
أولا: دالة استدعاء بيانات آخر صفقة مفتوحة
ثانيا: دالة التوتالكود PHP:double LastOrderInfo2(string info)
{
for(int i = OrdersTotal(); i >= 0; i--)
{
bool select = OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if (info=="Type") return(OrderType());
else if (info=="Lots") return(OrderLots());
else if (info=="Price") return(OrderOpenPrice());
else if (info=="TP") return(OrderTakeProfit());
else if (info=="SL") return(OrderStopLoss());
}
}
return(0);
}
كود PHP:int TotalOrders2(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);
}
حاولت تجربته بهذه الطريقة مع بعض التعديلات، لكن لا أدري أين الخلل، مع ملاحظة أن الصفقة المراد تنفيذ الأمر عليها كانت صفقة معلقة (لكن تم تفعيلها)
والهدف من هذا الكود (هناك بعض الصفقات المعلقة يحصل عليها جاب فتفتح على سعر غير السعر المحدد لتفتح عنده، وبهذا تكون قيمة نقاط البروفيت أقل من قيمة نقاط الاستوب، فأردت إضافة هذا الشرط عشان لو حصل كده يقوم الإكسبرت بتعديلها)
أرجو التوجيه، شكرًا لحسن تعاونكم مرة أخرى..
السلام عليكم ورحمة الله ،استفسار بعد إذنكم ، هل اللغة البرمجية MLQ4 تصلح لمنصات العملات الرقمية مثل منصة Binance على سبيل المثال؟