رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة kira-h
تمام أستاذي الكريم
أيضا نسيت دالة اغلاق كل أوامر الاكسبيرتات...
إذن الدالة خاطئة
ألا توجد دالة تعمل على الفكرة؟؟
(عند تحقق ربح معين من الحساب أو الاكويتي يتم إغلاق الكل والبدء من جديد باللوت الابتدائي على جميع الاكسبيرتات)
الفكرة مهمة جدا لأنها تزيد نسبة الأمان من خطر المضاعفات وهي يدويا متعبة جدا :)
جزاك الله خيرا
الحل الأفضل في رأيي هو ستقوم بعمل دالة ستضعها في إكسبرت واحد فقط وليس جميع الإكسبرتات وستكون هي المسئوله عن حساب الربح بالنسبه المئويه وإغلاق جميع صفقات الحساب ثم سأحفظ التوقيت الذي قمت بإغلاق جميع الصفقات فيه بإستخدام GlobalVariableSet
مثال
كود PHP:
void CheckCloseAll()
{
if(AccountProfit()>(AccountBalance()*ProfitRatio)/100)
{
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3);
i--;
}
if(OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3);
i--;
}
GlobalVariableSet("ClosedTime",TimeCurrent());
}
}
}
الآن التعديل الذي يجب أن تقوم بعمله هو عند البحث عن حجم لوت آخر صفقة أغلقت وآخر صفقة هل ربحت أم خسرت ستقوم بتعديل الداله
مثال
كود PHP:
double LastOrderProfit()
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderCloseTime()<GlobalVariableGet("ClosedTime"))
return(OrderProfit());
else return(0);
}
}
return(0);
}
وحجم اللوت
كود PHP:
double LastOrderLot()
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
return(OrderLots());
}
}
return(0);
}
ثم ستضع شروط المضاعفه
كود PHP:
if(LastOrderProfit()<0)CurrentLots = LastOrderLot() * LotsMpOnLoss;
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم استاذى الكريم
مستر دولار
وكل عام وانت بخير
سؤال برمجى
عندى اكسبيرت فتح صفقة شراء مثلا
وعكس السعر حتى وصل الى منطقة الاستيب فتح صفقة شراء تعزيز
وعكس السوق تانى حتى وصل الى صفقة شراء تعزيز تانى
السؤال هنا
عايز طريقة تجعل التيك بروفيت يتحرك الى اسفل مع كل صفقة تعزيز فى الشراء وفى البيع يتحرك الى اعلى مع كل صفقة تعزيز بيع وعند ملامسة خط التيك بروفيت يتم اغلاق كل الصفقات
وجزاك الله خير
وكل عام وانت بخير وصحة واحسن حال
رد:موضوع مخصص للأسئلة البرمجية
شباب حاولت بعدل على مؤشر وضعه مستر دولار هنا
https://forum.arabictrader.com/t9652...ml#post1721989
بس يتاقطع موفينج افريج يظهر اسهم
لكن التعديل
اذا قطعت 6 مؤشرات موفينج المؤشر البطيئ 55
يظهر تقاطع
كود:
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 DarkGoldenrod
#property indicator_color2 FireBrick
double CrossUp[];
double CrossDown[];
extern string S1="0=SMA /1=EMA /2=SMMA /3=Linear";
extern int FasterMA_Method=1;
extern int FasterMA = 3;
extern int FasterMA2 = 4;
extern int FasterMA3 = 5;
extern int FasterMA4 = 6;
extern int FasterMA5 = 7;
extern int FasterMA6 = 8;
extern int SlowerMA = 55;
extern int SlowerMA_Method=1;
extern bool SoundON=true;
double alertTag;
double control=2147483647;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0, DRAW_ARROW, EMPTY,1);
SetIndexArrow(0, 233);
SetIndexBuffer(0, CrossUp);
SetIndexStyle(1, DRAW_ARROW, EMPTY,1);
SetIndexArrow(1, 234);
SetIndexBuffer(1, CrossDown);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int limit, i, counter;
double fasterEMAnow, slowerEMAnow, fasterEMAprevious, slowerEMAprevious, fasterEMAafter, slowerEMAafter,fasterEMAnow2,fasterEMAprevious2,fasterEMAafter2,fasterEMAnow3,fasterEMAprevious3,fasterEMAafter3,fasterEMAnow4,fasterEMAprevious4,fasterEMAafter4,fasterEMAnow5,fasterEMAprevious5,fasterEMAafter5,fasterEMAnow6,fasterEMAprevious6,fasterEMAafter6;
double Range, AvgRange;
int counted_bars=IndicatorCounted();
//----
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
for(i = 0; i <= limit; i++) {
counter=i;
Range=0;
AvgRange=0;
for (counter=i ;counter<=i+9;counter++)
{
AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
}
Range=AvgRange/10;
fasterEMAnow = iMA(NULL, 0, FasterMA, 0, FasterMA_Method, PRICE_CLOSE, i);
fasterEMAprevious = iMA(NULL, 0, FasterMA, 0, FasterMA_Method, PRICE_CLOSE, i+1);
fasterEMAafter = iMA(NULL, 0, FasterMA, 0, FasterMA_Method, PRICE_CLOSE, i-1);
fasterEMAnow2 = iMA(NULL, 0, FasterMA2, 0, FasterMA_Method, PRICE_CLOSE, i);
fasterEMAprevious2 = iMA(NULL, 0, FasterMA2, 0, FasterMA_Method, PRICE_CLOSE, i+1);
fasterEMAafter2 = iMA(NULL, 0, FasterMA2, 0, FasterMA_Method, PRICE_CLOSE, i-1);
fasterEMAnow3 = iMA(NULL, 0, FasterMA3, 0, FasterMA_Method, PRICE_CLOSE, i);
fasterEMAprevious3 = iMA(NULL, 0, FasterMA3, 0, FasterMA_Method, PRICE_CLOSE, i+1);
fasterEMAafter3 = iMA(NULL, 0, FasterMA3, 0, FasterMA_Method, PRICE_CLOSE, i-1);
fasterEMAnow4 = iMA(NULL, 0, FasterMA4, 0, FasterMA_Method, PRICE_CLOSE, i);
fasterEMAprevious4 = iMA(NULL, 0, FasterMA4, 0, FasterMA_Method, PRICE_CLOSE, i+1);
fasterEMAafter4 = iMA(NULL, 0, FasterMA4, 0, FasterMA_Method, PRICE_CLOSE, i-1);
fasterEMAnow5 = iMA(NULL, 0, FasterMA5, 0, FasterMA_Method, PRICE_CLOSE, i);
fasterEMAprevious5 = iMA(NULL, 0, FasterMA5, 0, FasterMA_Method, PRICE_CLOSE, i+1);
fasterEMAafter5 = iMA(NULL, 0, FasterMA5, 0, FasterMA_Method, PRICE_CLOSE, i-1);
fasterEMAnow6 = iMA(NULL, 0, FasterMA6, 0, FasterMA_Method, PRICE_CLOSE, i);
fasterEMAprevious6 = iMA(NULL, 0, FasterMA6, 0, FasterMA_Method, PRICE_CLOSE, i+1);
fasterEMAafter6 = iMA(NULL, 0, FasterMA6, 0, FasterMA_Method, PRICE_CLOSE, i-1);
slowerEMAnow = iMA(NULL, 0, SlowerMA, 0, SlowerMA_Method, PRICE_CLOSE, i);
slowerEMAprevious = iMA(NULL, 0, SlowerMA, 0, SlowerMA_Method, PRICE_CLOSE, i+1);
slowerEMAafter = iMA(NULL, 0, SlowerMA, 0, SlowerMA_Method, PRICE_CLOSE, i-1);
if(((fasterEMAnow&&fasterEMAnow2&&fasterEMAnow3&&fasterEMAnow4&&fasterEMAnow5&&fasterEMAnow6) > slowerEMAnow) && ((fasterEMAprevious&&fasterEMAprevious2&&fasterEMAprevious3&&fasterEMAprevious4&&fasterEMAprevious5&&fasterEMAprevious6) < slowerEMAprevious) && ((fasterEMAafter&&fasterEMAafter2&&fasterEMAafter3&&fasterEMAafter4&&fasterEMAafter5&&fasterEMAafter6) > slowerEMAafter)) {
CrossUp[i] = Low[i] - Range*0.5;
}
else if (((fasterEMAnow&&fasterEMAnow2&&fasterEMAnow3&&fasterEMAnow4&&fasterEMAnow5&&fasterEMAnow6) < slowerEMAnow) && ((fasterEMAprevious&&fasterEMAprevious2&&fasterEMAprevious3&&fasterEMAprevious4&&fasterEMAprevious5&&fasterEMAprevious6) > slowerEMAprevious) && ((fasterEMAafter&&fasterEMAafter2&&fasterEMAafter3&&fasterEMAafter4&&fasterEMAafter5&&fasterEMAafter6) < slowerEMAafter)) {
CrossDown[i] = High[i] + Range*0.5;
}
if (SoundON==true && i==1 && CrossUp[i] > CrossDown[i] && alertTag!=Time[0]){
Alert("EMA Cross Trend going Down on ",Symbol()," ",Period());
alertTag = Time[0];
}
if (SoundON==true && i==1 && CrossUp[i] < CrossDown[i] && alertTag!=Time[0]){
Alert("EMA Cross Trend going Up on ",Symbol()," ",Period());
alertTag = Time[0];
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
ولكن لم يظهر الاسهم على شارت لا اعرف اين الخطأ .!
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة Jmeel
أستاذ سمير هل تقصد أن يتعدل التارجت في عقود الشراء الأول والثاني أو أي عدد كان ويكون بنفس تارجت العقد الأخير ؟؟؟
السلام عليكم اخى الكريم جميل
كل عام وانت بخير وصحة واحسن حال
هو تمام كما تقول
يكون التارجت يتحرك مع كل صفقة تعزيز جديدة ويكون التارجت هو لاخرى صفقة تم فتحه وعند ملامسة يتم الاغلاق على الكل
وشكرا على المساعدة الكريمة
تحياتى لك
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة سمير محمد ارمان
السلام عليكم اخى الكريم جميل
كل عام وانت بخير وصحة واحسن حال
هو تمام كما تقول
يكون التارجت يتحرك مع كل صفقة تعزيز جديدة ويكون التارجت هو لاخرى صفقة تم فتحه وعند ملامسة يتم الاغلاق على الكل
وشكرا على المساعدة الكريمة
تحياتى لك
اهلا بك أستاذ سمير ، حنعمل دالتين الأولى للرجوع بتارجت الصفقة الأخيرة
كود PHP:
double LastOrderTPB(){
for(int i=OrdersTotal()-1; i>=0; i--){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MyMagic&&OrderType()==OP_BUY){
return(OrderTakeProfit());
}
}
return(0);
}
ثم الدالة التالية لتعديل صفقات الشراء
كود PHP:
void BuyOrderModify()
{
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == MyMagic)
{
bool ret = OrderModify(OrderTicket(), OrderOpenPrice(), 0, LastOrderTPB(), 0, White);
if (ret == false)
Print("OrderModify() error - ", ErrorDescription(GetLastError()));
}
}
}
وفي دالة ستارت حتستدعي دالة التعديل كود PHP:
BuyOrderModify();
وطبعا حتعمل دالتين لصفقات البيع .
الله يوفقك أخي سمير .
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة Jmeel
اهلا بك أستاذ سمير ، حنعمل دالتين الأولى للرجوع بتارجت الصفقة الأخيرة
كود PHP:
double LastOrderTPB(){
for(int i=OrdersTotal()-1; i>=0; i--){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MyMagic&&OrderType()==OP_BUY){
return(OrderTakeProfit());
}
}
return(0);
}
ثم الدالة التالية لتعديل صفقات الشراء
كود PHP:
void BuyOrderModify()
{
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == MyMagic)
{
bool ret = OrderModify(OrderTicket(), OrderOpenPrice(), 0, LastOrderTPB(), 0, White);
if (ret == false)
Print("OrderModify() error - ", ErrorDescription(GetLastError()));
}
}
}
وفي دالة ستارت حتستدعي دالة التعديل كود PHP:
BuyOrderModify();
وطبعا حتعمل دالتين لصفقات البيع .
الله يوفقك أخي سمير .
كلمة شكر قليلة جدا على كرمك و معروفك معى
بجد جزاك الله عنى كل خير
والف مليون شكر على هذه المساعدة الكريمة
والتحية موصولة الى استاذى مستر دولار
وتحياتى الى الجميع وكل عام وانتم بخير وصحة واحسن حال
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم ورحمة الله وبركاته
استاذ أسامة بعد التحية وايضا تحياتي للاستاذ جميل والاستاذ يوسف
بارك الله فيكم جميعا
في فكرة بحاول اكتب لها أكواد برمجية وللأسف عجزت مع أنها تقريبا بسيطة بس صراحة احترت فيها جدا
احتاج أكواد لتصميم اكسبرت بالمواصفات التالية
عندما يقوم الاكسبرت بفتح صفقة وليكن شراء طبقا لشروط الشراء الموضوعة به يتم عمل التالي
يقوم الاكسبرت فور فتح عملية الشراء السابقة ولتكن 1 لوت ان يقوم بفتح صفقة بيع ستوب على مسافة من صفقة الشراء كمتغير خارجي Step وتكون صفقة البيع ستوب هذه بـ 3 لوت
في حالة تحقق صفقة الشراء السابقة لهدفها يتم إغلاق صفقة البيع ستوب المعلقة والبدء من جديد
أما في حالة عكس السعر علينا وتفعلت صفقة البيع ستوب يقوم الاكسبرت فورا بفتح صفقة شراء ستوب بلوت مضاعف للاسبق ( ضعف صفقة البيع والتي كانت بيع ستوب ) أي يقوم بفتح صفقة شراء ستوب بـ 6 لوت
في حال تحقيق صفقة البيع لهدفها يتم إغلاق جميع الصفقات المفتوحة والمعلقة والبدء من جديد
أما في حالة عدم تحقيق صفقة البيع المفتوحة لهدفها وعكس السعر وتفعلت صفقة الشراء ستوب وأصبحت شراء فورا يقوم الاكسبرت بفتح صفقة بيع ستوب بلوت مضاعف للسابق أي بـ 12 لوت وهكذا إلى ان يتم تحقيق الهدف بحول الله
ملخص السابق كالتالي
عند تحقق شروط الشراء مثلا
يقوم الاكسبرت بفتح صفقة الشراء بلوت مبدئي وليكن1 لوت
وفي نفس الوقت فتح صفقة بيع ستوب على مسافة Step بـ 3 لوت
يوجد 2 سيناريو
الأول تحقيق صفقة الشراء هدفها وهنا يتم إغلاق الصفقات جميعا بما فيها المعلقة
الثاني عدم تحقيق صفقة الشراء هدفها وعكس السعر وتفعلت صفقة البيع ستوب
هنا يتم فتح صفقة شراء ستوب فورا بـ 6 لوت ضعف السابق
يعني أستاذ أسامة وأسف اطلت عليك مطلوب من الاكسبرت عندما يفتح صفقة شراء ان يضع بيع ستوب بلوت ثلاث امثال اللوت المبدئي ولو تفعلت صفقة البيع ستوب يفتح فورا شراء ستوب بضعف السابق أي 6 لوت ولو جابت صفقة البيع هدفها يغلق الجميع أما إذا لم تحقق هدفها وتفعلت صفقة الشراء ستوب يقوم فورا بفتح صفقة بيع ستوب بضعف السابقة أي 12 لوت وهكذا
أما في حالة قيام الاكسبرت بفتح صفقة أولى بيع بلوت وليكن 1
يقوم بفتح صفقة شراء ستوب على بعد Step بلوت 3
واذا حققت هدفها يغلق المعلقة فورا والبدء من جديد
اما لو عكس السعر وتفعلت صفقة الشراء ستوب يقوم فورا بفتح صفقة بيع ستوب بضعف اللوت السابق أي 6 لوت
وهكذا
توضيح اخر
الصفقة الاولى بيع 1 لوت يفتح شراء ستوب على بعد Step بـ 3 لوت ثم بيع ستوب بـ 6 لوت ثم شراء ستوب بـ 12 لوت الخ
اما اذا كانت الصفقة الأولى شراء 1 لوت يفتح بيع ستوب بـ 3 لوت ثم شراء ستوب بـ 6 لوت ثم بيع ستوب بـ 12 لوت وهكذا
اسف اطلت عليك بس صدقني بحاول مع نفسي ولما بعجز بكتب ليك أستاذي الكريم
تحياتي لشخصك الكريم
أخيك في الله وليد
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة 300
شباب حاولت بعدل على مؤشر وضعه مستر دولار هنا
https://forum.arabictrader.com/t9652...ml#post1721989
بس يتاقطع موفينج افريج يظهر اسهم
لكن التعديل
اذا قطعت 6 مؤشرات موفينج المؤشر البطيئ 55
يظهر تقاطع
كود:
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 DarkGoldenrod
#property indicator_color2 FireBrick
double CrossUp[];
double CrossDown[];
extern string S1="0=SMA /1=EMA /2=SMMA /3=Linear";
extern int FasterMA_Method=1;
extern int FasterMA = 3;
extern int FasterMA2 = 4;
extern int FasterMA3 = 5;
extern int FasterMA4 = 6;
extern int FasterMA5 = 7;
extern int FasterMA6 = 8;
extern int SlowerMA = 55;
extern int SlowerMA_Method=1;
extern bool SoundON=true;
double alertTag;
double control=2147483647;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0, DRAW_ARROW, EMPTY,1);
SetIndexArrow(0, 233);
SetIndexBuffer(0, CrossUp);
SetIndexStyle(1, DRAW_ARROW, EMPTY,1);
SetIndexArrow(1, 234);
SetIndexBuffer(1, CrossDown);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int limit, i, counter;
double fasterEMAnow, slowerEMAnow, fasterEMAprevious, slowerEMAprevious, fasterEMAafter, slowerEMAafter,fasterEMAnow2,fasterEMAprevious2,fasterEMAafter2,fasterEMAnow3,fasterEMAprevious3,fasterEMAafter3,fasterEMAnow4,fasterEMAprevious4,fasterEMAafter4,fasterEMAnow5,fasterEMAprevious5,fasterEMAafter5,fasterEMAnow6,fasterEMAprevious6,fasterEMAafter6;
double Range, AvgRange;
int counted_bars=IndicatorCounted();
//----
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
for(i = 0; i <= limit; i++) {
counter=i;
Range=0;
AvgRange=0;
for (counter=i ;counter<=i+9;counter++)
{
AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
}
Range=AvgRange/10;
fasterEMAnow = iMA(NULL, 0, FasterMA, 0, FasterMA_Method, PRICE_CLOSE, i);
fasterEMAprevious = iMA(NULL, 0, FasterMA, 0, FasterMA_Method, PRICE_CLOSE, i+1);
fasterEMAafter = iMA(NULL, 0, FasterMA, 0, FasterMA_Method, PRICE_CLOSE, i-1);
fasterEMAnow2 = iMA(NULL, 0, FasterMA2, 0, FasterMA_Method, PRICE_CLOSE, i);
fasterEMAprevious2 = iMA(NULL, 0, FasterMA2, 0, FasterMA_Method, PRICE_CLOSE, i+1);
fasterEMAafter2 = iMA(NULL, 0, FasterMA2, 0, FasterMA_Method, PRICE_CLOSE, i-1);
fasterEMAnow3 = iMA(NULL, 0, FasterMA3, 0, FasterMA_Method, PRICE_CLOSE, i);
fasterEMAprevious3 = iMA(NULL, 0, FasterMA3, 0, FasterMA_Method, PRICE_CLOSE, i+1);
fasterEMAafter3 = iMA(NULL, 0, FasterMA3, 0, FasterMA_Method, PRICE_CLOSE, i-1);
fasterEMAnow4 = iMA(NULL, 0, FasterMA4, 0, FasterMA_Method, PRICE_CLOSE, i);
fasterEMAprevious4 = iMA(NULL, 0, FasterMA4, 0, FasterMA_Method, PRICE_CLOSE, i+1);
fasterEMAafter4 = iMA(NULL, 0, FasterMA4, 0, FasterMA_Method, PRICE_CLOSE, i-1);
fasterEMAnow5 = iMA(NULL, 0, FasterMA5, 0, FasterMA_Method, PRICE_CLOSE, i);
fasterEMAprevious5 = iMA(NULL, 0, FasterMA5, 0, FasterMA_Method, PRICE_CLOSE, i+1);
fasterEMAafter5 = iMA(NULL, 0, FasterMA5, 0, FasterMA_Method, PRICE_CLOSE, i-1);
fasterEMAnow6 = iMA(NULL, 0, FasterMA6, 0, FasterMA_Method, PRICE_CLOSE, i);
fasterEMAprevious6 = iMA(NULL, 0, FasterMA6, 0, FasterMA_Method, PRICE_CLOSE, i+1);
fasterEMAafter6 = iMA(NULL, 0, FasterMA6, 0, FasterMA_Method, PRICE_CLOSE, i-1);
slowerEMAnow = iMA(NULL, 0, SlowerMA, 0, SlowerMA_Method, PRICE_CLOSE, i);
slowerEMAprevious = iMA(NULL, 0, SlowerMA, 0, SlowerMA_Method, PRICE_CLOSE, i+1);
slowerEMAafter = iMA(NULL, 0, SlowerMA, 0, SlowerMA_Method, PRICE_CLOSE, i-1);
if(((fasterEMAnow&&fasterEMAnow2&&fasterEMAnow3&&fasterEMAnow4&&fasterEMAnow5&&fasterEMAnow6) > slowerEMAnow) && ((fasterEMAprevious&&fasterEMAprevious2&&fasterEMAprevious3&&fasterEMAprevious4&&fasterEMAprevious5&&fasterEMAprevious6) < slowerEMAprevious) && ((fasterEMAafter&&fasterEMAafter2&&fasterEMAafter3&&fasterEMAafter4&&fasterEMAafter5&&fasterEMAafter6) > slowerEMAafter)) {
CrossUp[i] = Low[i] - Range*0.5;
}
else if (((fasterEMAnow&&fasterEMAnow2&&fasterEMAnow3&&fasterEMAnow4&&fasterEMAnow5&&fasterEMAnow6) < slowerEMAnow) && ((fasterEMAprevious&&fasterEMAprevious2&&fasterEMAprevious3&&fasterEMAprevious4&&fasterEMAprevious5&&fasterEMAprevious6) > slowerEMAprevious) && ((fasterEMAafter&&fasterEMAafter2&&fasterEMAafter3&&fasterEMAafter4&&fasterEMAafter5&&fasterEMAafter6) < slowerEMAafter)) {
CrossDown[i] = High[i] + Range*0.5;
}
if (SoundON==true && i==1 && CrossUp[i] > CrossDown[i] && alertTag!=Time[0]){
Alert("EMA Cross Trend going Down on ",Symbol()," ",Period());
alertTag = Time[0];
}
if (SoundON==true && i==1 && CrossUp[i] < CrossDown[i] && alertTag!=Time[0]){
Alert("EMA Cross Trend going Up on ",Symbol()," ",Period());
alertTag = Time[0];
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
ولكن لم يظهر الاسهم على شارت لا اعرف اين الخطأ .!
وضعك للشروط بهذا الشكل خاطئه
كود PHP:
(fasterEMAnow&&fasterEMAnow2&&fasterEMAnow3&&fasterEMAnow4&&fasterEMAnow5&&fasterEMAnow6) > slowerEMAnow)
فيجب أن تقارن كل متغير بقيمة المتغيرات الأخرى على حده
طبعا بعد تعديل هذه المشكله سيبقى ملاحظه أخرى
بهذه الشروط أنت جعلت شرط التحقق أن تتقاطع جميع الخطوط في نفس الشمعه فربما هذا يكون نادرا جدا حدوثه
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة abou fares
أشكرك جدا أخي الكريم abou fares بارك الله فيك
يبدو أن هذا المنتدى مليء بالكنوز والتي ليس لها إلا عنوان واحد
Made By MR.dollar
قمت بتنزل أخر نسخة من الاكسبرت وللاسف لا يعمل معي ويظهر في الجورنال ان الاكسبرت تم ازالتة removed ولا أدري ما السبب ولا يعمل إطلاقا
مرفق النسخة الأخيرة من الاكسبرت
رد:موضوع مخصص للأسئلة البرمجية
مرحبا أيها الاصدقاء أحتج مساعدتكم على تعديل هدا السكريبت .
هو سكريبت موفينغ 5 close و open و قف الخصارة على 40 .
المشكلة هي أريده أن "لا يغلق أي الصفقات الرابحة أقل من 40 نقطة ."
هدا هو السكريبت وشرا لكم جميعا.
كود PHP:
//+------------------------------------------------------------------+
//| This MQL is generated by Expert Advisor Builder |
//| http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ |
//| |
//| In no event will author be liable for any damages whatsoever. |
//| Use at your own risk. |
//| |
//+------------------- DO NOT REMOVE THIS HEADER --------------------+
#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4
#property copyright "Expert Advisor Builder"
#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"
extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = True;
extern double Lots = 1.0;
extern int Slippage = 3;
extern bool UseStopLoss = True;
extern int StopLoss = 40;
extern bool UseTakeProfit = False;
extern int TakeProfit = 60;
extern bool UseTrailingStop = False;
extern int TrailingStop = 30;
int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;
if (EachTickMode) Current = 0; else Current = 1;
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;
if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;
//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+
double Buy1_1 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double Buy1_2 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_OPEN, Current + 1);
double Buy2_1 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 2);
double Buy2_2 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_OPEN, Current + 2);
double Sell1_1 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double Sell1_2 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_OPEN, Current + 1);
double Sell2_1 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 2);
double Sell2_2 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_OPEN, Current + 2);
double CloseBuy1_1 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double CloseBuy1_2 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_OPEN, Current + 1);
double CloseSell1_1 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double CloseSell1_2 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_OPEN, Current + 1);
//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+
//Check position
bool IsTrade = False;
for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
IsTrade = True;
if(OrderType() == OP_BUY) {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+
if (CloseBuy1_1 < CloseBuy1_2) Order = SIGNAL_CLOSEBUY;
//+------------------------------------------------------------------+
//| Signal End(Exit Buy) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+
if (CloseSell1_1 > CloseSell1_2) Order = SIGNAL_CLOSESELL;
//+------------------------------------------------------------------+
//| Signal End(Exit Sell) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+
if (Buy1_1 > Buy1_2 && Buy2_1 <= Buy2_2) Order = SIGNAL_BUY;
if (Sell1_1 < Sell1_2 && Sell2_1 >= Sell2_2) Order = SIGNAL_SELL;
//+------------------------------------------------------------------+
//| Signal End |
//+------------------------------------------------------------------+
//Buy
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("BUY order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
} else {
Print("Error opening BUY order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
//Sell
if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("SELL order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
} else {
Print("Error opening SELL order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
if (!EachTickMode) BarCount = Bars;
return(0);
}
//+------------------------------------------------------------------+