النتائج 1 إلى 4 من 4
الموضوع: مساعدة من الخبراء لو تسمحوا
- 04-03-2023, 08:05 PM #1
مساعدة من الخبراء لو تسمحوا
السلام عليكم يا اخوة
هذا الكود هو كود اول اكسبيرت لى المشكلة انه لا يعمل حاولت كثيرا ان اجد الخطا حيث انه لا يقوم بارسال اوامر الشراء والبيع فى الباك تيست ولا اجد الخطأ به
كود PHP://+------------------------------------------------------------------+
//| expert .mq4 |
//| Copyright 2023, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property strict
//--- input parameters
input int MagicNumber=55555;
input double Lots=0.1;
input double TakeProfit=10.0;
input double StopLoss=10.0;
input int MaxTrades=0;
input bool UseMultiplier=true;
input double Multiplier=2;
input int Step=20;
input string info1=" Bollinger Bands Settings on frame 15 min";
input int period1=55;
input int shift1=0;
input double deviation10=2;
input ENUM_APPLIED_PRICE ApplyTo=PRICE_CLOSE;
input string info2=" Bollinger Bands Settings on frame 1 min";
input int period2=55;
input int shift2=0;
input double deviation2=2;
input ENUM_APPLIED_PRICE ApplyTo2=PRICE_CLOSE;
input string info3=" Bollinger Bands Settings on frame 1 min";
input int period3=200;
input int shift3=0;
input int deviation3=2;
input ENUM_APPLIED_PRICE ApplyTo3=PRICE_CLOSE;
input string info4=" Bollinger Bands Settings on frame 5 min";
input int period4=200;
input int shift4=0;
input int deviation4=2;
input ENUM_APPLIED_PRICE ApplyTo4=PRICE_CLOSE;
input string info5=" stochastic Settings on frame 1 min";
input ENUM_MA_METHOD MA_Method5=MODE_SMA;
input int price_field=0;
input double OverSold=20;
input double OverBought=80;
double point;
int digits,P;
datetime Time0;
double Lot_Decimal;
//-------------------------------------------------------------------------------------------------------------------------------------
int OnInit()
{
if(MarketInfo(Symbol(),MODE_MINLOT)<0.1)
Lot_Decimal=2;
else
Lot_Decimal=1;
if(_Digits==5 || _Digits==3)
P=10;
else
P=1;
if(_Digits<4)
{
point=0.01;
}
else
{
point=0.0001;
}
return(0);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason) { };
//+------------------------------------------------------------------+
//تعريف الدوال المهمة التى سيتم استخدمها
//sto1=على فريم الدقيقة
double stochastic() { double stoch=iStochastic(Symbol(),1,55,37,7,1,0,MODE_MAIN,0);
return(stoch); }
//+------------------------------------------------------------------+
//عل فريم الدقيقية
double Bands1(int mode,int shift_) { double bands1=iBands(Symbol(),1,55,2,0,ApplyTo,mode,shift_);
return(bands1); }
//+------------------------------------------------------------------+
//band=على فريم الخمس الدقائق
double Bands2(int mode,int shift_) { double bands2=iBands(Symbol(),5,200,2,0,ApplyTo,mode,shift_);
return(bands2); }
//+------------------------------------------------------------------+
//band=على فريم الربع ساعة
double Bands3(int mode,int shift_) { double bands3=iBands(Symbol(),15,55,2,0,ApplyTo,mode,shift_);
return(bands3);}
//------------------------------------------------------------------------------------------
// شرط اغلاق الصفقات
//وصول السعر الى ربح عشر نقاط من الصفقة الاولى
//------------------------------------------------------------------------------------------------
//شرط عدم تخطى الصفقات اكثر من عدد معين بحيث لا يغرق الحساب فى عدد صفقات كتيره
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);
}
//-------------------------------------------------------------------------------------------------
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnTick()
{
//الشراء
//بعيد عن المتوسط بعدد كويس من النقط + الاستو فى تشبع + ملامسة الحد السفلى للبولينجر على حميع الفريمات
if(Ask <= Bands1(MODE_LOWER,1)
&& Ask <= Bands2(MODE_LOWER,1)&& Ask <= Bands3(MODE_LOWER,1)
&& stochastic()<OverSold )
{
int ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,digits),3*P,StopLoss,TakeProfit,"EA",MagicNumber,0,Blue);
PlaySound("Alert.wav");
}
//البيع
//الاستو فى تشبع+ملامسة الحد العلوى للبولينجر+بعيد عن المتوسط بعدد كافى من النقط
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
if(Bid >= Bands1(MODE_UPPER,1) && Bid >= Bands2(MODE_UPPER,1)
&& Bid >= Bands3(MODE_UPPER,1) && stochastic()>=OverBought )
{
int ticket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,digits),3*P,StopLoss,TakeProfit,"EA",MagicNumber,0,Blue);
PlaySound("Alert.wav");
}}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void CloseOrders(int type)
{
for(int cnt=0; cnt<OrdersTotal(); cnt++)
{
bool select=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol() && OrderType()==type)
{
if(OrderType()==OP_BUY)
{
bool close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,_Digits),3*P);
}
if(OrderType()==OP_SELL)
{
bool close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,_Digits),3*P);
}
}
}
}
- 07-03-2023, 09:25 PM #2كود PHP:
//+------------------------------------------------------------------+
//| expert .mq4 |
//| Copyright 2023, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property strict
//--- input parameters
input int MagicNumber=55555;
input double Lots=0.1;
input double TakeProfit=10.0;
input double StopLoss=10.0;
input int MaxTrades=0;
input bool UseMultiplier=true;
input double Multiplier=2;
input int Step=20;
input string info1=" Bollinger Bands Settings on frame 15 min";
input int period1=55;
input int shift1=0;
input double deviation10=2;
input ENUM_APPLIED_PRICE ApplyTo=PRICE_CLOSE;
input string info2=" Bollinger Bands Settings on frame 1 min";
input int period2=55;
input int shift2=0;
input double deviation2=2;
input ENUM_APPLIED_PRICE ApplyTo2=PRICE_CLOSE;
input string info3=" Bollinger Bands Settings on frame 1 min";
input int period3=200;
input int shift3=0;
input int deviation3=2;
input ENUM_APPLIED_PRICE ApplyTo3=PRICE_CLOSE;
input string info4=" Bollinger Bands Settings on frame 5 min";
input int period4=200;
input int shift4=0;
input int deviation4=2;
input ENUM_APPLIED_PRICE ApplyTo4=PRICE_CLOSE;
input string info5=" stochastic Settings on frame 1 min";
input ENUM_MA_METHOD MA_Method5=MODE_SMA;
input int price_field=0;
input double OverSold=20;
input double OverBought=80;
double point;
int digits,P;
datetime Time0;
double Lot_Decimal;
//-------------------------------------------------------------------------------------------------------------------------------------
int OnInit()
{
if(MarketInfo(Symbol(),MODE_MINLOT)<0.1)
Lot_Decimal=2;
else
Lot_Decimal=1;
if(_Digits==5 || _Digits==3)
P=10;
else
P=1;
if(_Digits<4)
{
point=0.01;
}
else
{
point=0.0001;
}
return(0);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason) { };
//+------------------------------------------------------------------+
//تعريف الدوال المهمة التى سيتم استخدمها
//sto1=على فريم الدقيقة
double stochastic() { double stoch=iStochastic(Symbol(),1,55,37,7,1,0,MODE_MAIN,0);
return(stoch); }
//+------------------------------------------------------------------+
//عل فريم الدقيقية
double Bands1(int mode,int shift_) { double bands1=iBands(Symbol(),1,55,2,0,ApplyTo,mode,shift_);
return(bands1); }
//+------------------------------------------------------------------+
//band=على فريم الخمس الدقائق
double Bands2(int mode,int shift_) { double bands2=iBands(Symbol(),5,200,2,0,ApplyTo,mode,shift_);
return(bands2); }
//+------------------------------------------------------------------+
//band=على فريم الربع ساعة
double Bands3(int mode,int shift_) { double bands3=iBands(Symbol(),15,55,2,0,ApplyTo,mode,shift_);
return(bands3);}
//------------------------------------------------------------------------------------------
// شرط اغلاق الصفقات
//وصول السعر الى ربح عشر نقاط من الصفقة الاولى
//------------------------------------------------------------------------------------------------
//شرط عدم تخطى الصفقات اكثر من عدد معين بحيث لا يغرق الحساب فى عدد صفقات كتيره
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);
}
//-------------------------------------------------------------------------------------------------
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnTick()
{
double BTP=0,STP=0,BSL=0,SSL=0;
if(StopLoss>0){BSL=Ask-StopLoss*point;SSL=Bid+StopLoss*point;}
if(TakeProfit>0){BTP=Ask+TakeProfit*point;STP=Bid-TakeProfit*point;}
//الشراء
//بعيد عن المتوسط بعدد كويس من النقط + الاستو فى تشبع + ملامسة الحد السفلى للبولينجر على حميع الفريمات
if(Ask <= Bands1(MODE_LOWER,1)
&& Ask <= Bands2(MODE_LOWER,1)&& Ask <= Bands3(MODE_LOWER,1)
&& stochastic()<OverSold )
{
int ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),3,BSL,BTP,"EA",MagicNumber,0,Blue);
PlaySound("Alert.wav");
}
//البيع
//الاستو فى تشبع+ملامسة الحد العلوى للبولينجر+بعيد عن المتوسط بعدد كافى من النقط
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
if(Bid >= Bands1(MODE_UPPER,1) && Bid >= Bands2(MODE_UPPER,1)
&& Bid >= Bands3(MODE_UPPER,1) && stochastic()>=OverBought )
{
int ticket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),3,SSL,STP,"EA",MagicNumber,0,Blue);
PlaySound("Alert.wav");
}}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void CloseOrders(int type)
{
for(int cnt=0; cnt<OrdersTotal(); cnt++)
{
bool select=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol() && OrderType()==type)
{
if(OrderType()==OP_BUY)
{
bool close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,_Digits),3*P);
}
if(OrderType()==OP_SELL)
{
bool close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,_Digits),3*P);
}
}
}
}
- 07-03-2023, 09:30 PM #3
فيه خطأ بالنسبة لدالة فتح الصفقات بحيث متغير digits معرفه ولم تعطيه اي قيمة في حين موجود متغير افتراضي في اللغة يلعب هدا الدور واللي اسمه Digits
بالنسبة لقيمة الانزلاق السعري المقبول اللي هو 3 نقاط مثلا ماتحتاج تحوله بدلالة بيب خليه بالنقاط
بالنسبة لستوب لوز والهدف لا تضعه بالنقاط في دالة ordersend لابد من وضع الستوب لوز والهدف كسعر لابد ان تحسبه قبلا ثم تضعه في متغير تم ترسله في الدالة
- 07-03-2023, 09:34 PM #4
اخي من الافضل تستعين بفيديوهات هده القناة راح تفيدك كثير في فهم اللغة
https://www.youtube.com/@OrchardForex
https://www.youtube.com/c/jimdandy1958