النتائج 1 إلى 6 من 6
- 27-07-2021, 02:10 AM #1
MQL5: كيفية الحصول على أعلى قيمة لمؤشر في فترة محددة | الرجاء المساعدة
السلام عليكم ورحمة الله وبركاته
انا بصنع مؤشر بلغة MQL5 وعايز أحدد فيه أعلى قيمة وأدنى قيمة لمؤشر الـ RSI خلال 100 شمعة
انا عرفت ان الطريقة في MQL5 بتعتمد على استخدام CopyBuffer
لكن مش عارف الخطوات تحديدا
فعايز حد يشرحلي تحديدا ازاي اكتب الكود ده من الألف الى الياء
ولو مرفق مثال توضيحي اكون شاكر جدا
وجزاكم الله خيرا
- 27-07-2021, 10:07 PM #2كود PHP:
#property copyright
#property link
#property indicator_separate_window
#property indicator_minimum -1
#property indicator_maximum +1
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 LawnGreen
//-Parametros
extern int periodo=20;
extern int periodoRSI=20;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double RSI_Buffer[];
double RSI_Buffer2[];
double a1_Buffer[];
double a2_Buffer[];
double b1_Buffer[];
double b2_Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
IndicatorBuffers(8);
//--- Internal Variables
SetIndexBuffer(2,RSI_Buffer);
SetIndexBuffer(3,a1_Buffer);
SetIndexBuffer(4,a2_Buffer);
SetIndexBuffer(5,b1_Buffer);
SetIndexBuffer(6,b2_Buffer);
SetIndexBuffer(7,RSI_Buffer2);
//--- Plot a line
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//---- last counted bar will be recounted
int counted_bars = IndicatorCounted();
if(counted_bars>0) counted_bars--;
int limit=Bars-counted_bars;
//---- Current RSI value
for(int i = limit-1; i>=0; i--)// Count down for one pass
RSI_Buffer[i]=iRSI(NULL,0,periodoRSI,PRICE_CLOSE,i);
//---- Highest price in 20 periods
for(i = limit-1; i>=0; i--)// Count down for one pass
a1_Buffer[i]=High[iHighest(NULL,0,MODE_HIGH,periodo,i)];
//---- Highest RSI value in 20 periods
for(i = limit-1; i>=0; i--) // Count down for one pass
a2_Buffer[i] = RSI_Buffer[ArrayMaximum(RSI_Buffer, periodo, i)];
//---- Lowest price in 20 periods
for(i = 0; i<limit; i++)
b1_Buffer[i]=Low[iLowest(NULL,0,MODE_LOW,periodo,i)];
//---- Lowest RSI value in 20 periods
for(i= limit-1; i>=0; i--)
b2_Buffer[i] = RSI_Buffer[ArrayMinimum(RSI_Buffer, periodo, i)];
//---- Bullish Divergence
for(i= limit-1; i>=0; i--)
{
if((Close[i]<=b1_Buffer[i] && RSI_Buffer[i]>b2_Buffer[i]) || (RSI_Buffer[i]<=b2_Buffer[i] && Close[i]>b1_Buffer[i]))
ExtMapBuffer1[i]=-1;
else
ExtMapBuffer1[i]=0;
}
//--- Bearish Divergence
for(i= limit-1; i>=0; i--)
{
if((Close[i]>=a1_Buffer[i] && RSI_Buffer[i]<a2_Buffer[i])|| (RSI_Buffer[i]>=a2_Buffer[i] && Close[i]<a1_Buffer[i]))
ExtMapBuffer2[i]=1;
else
ExtMapBuffer2[i]=0;
}
//----
return(0);
}
//+------------------------------------------------------------------+
- 27-07-2021, 10:11 PM #3
حاول تقرأ الكود بعناية وتمعن وراح يساعدك في فكرة مؤشرك لان الامر قائم على buffers و arrays و max و min الخاص ب array و مقارنات بين القيم
- 28-07-2021, 07:56 AM #4
مشكور اخي الحبيب بالفعل استفادت من هذا المؤشر المرفق جزاك الله خيرا
لكن كيف البرمجة بمثل هذه الكيفية على لغة MQL5 ؟
- 28-07-2021, 04:05 PM #5
الانتقال بين mq4 و mql5 سهل فقط اختلافات بسيطة
https://www.mql5.com/en/articles/81
هدا المقال يوضح كيفية الانتقال بين الاثنين بشكل سلس
- 30-08-2021, 02:46 AM #6
شكرا جزيلا اخي GH_EXE لكني لم استطيع حل المشكلة بعد
رجاء من الاخوة مساعدتي لمن له خبرة في هذه النقطة وجزاكم الله خير