مشاهدة النسخة كاملة : الموضوع المخصص للأسئلة البرمجية mql4
الصفحات :
1
2
3
[
4]
5
6
7
8
9
10
11
12
13
14
15
kira-h
27-10-2017, 07:33 PM
يبقى الوضع كما هو عليه
لم يفتح صفقات
جربت الحلقات بحيث يقرأ فيبو اخر شمعة اغلقت صاعدة وهابطة ومش نافع بردو
جربته وفتح الصفقات عادي
تأكد من تحقق الشروط
Aminox
29-10-2017, 12:57 AM
السلام عليكم
تم تصحيح اخطاء تقنية مع إضافة شرط عدم تكرار الصفقة وشرط فتح الصفقة لحظة الاغلاق
بالنسخة المرفقة
تحياتي أخي حسن جزاك الله خيرا
ستتتم التجربا حالا
elhelaly
29-10-2017, 12:57 AM
برجاء شرح order modify للحالات التاليه
كمثال الاكسبيرت يقوم بفتح صفقه شراء ووضع صفقه معلقه بيع على بعد 50 نقطه كيف يمكن عمل modify للاوردر المعلق بأنه فى حالة تحرك السعر 40 نقطه مثلا فى صفقه الشراء يتم وضع الامر المعلق على نقطه الدخول لصفقه الشراء
Aminox
29-10-2017, 01:02 AM
أخي حسن هناك شيئا ما غير صحيح
الصورة تعبر عن الخطأ ... و هل يمكن
مثلا كل 10 نقاط يتم فتح صفقة إلى حين
تغيير لون الشمعة يتم إغلاق جميع الصفقات
والبداية في صفقات أخرى و هكذا ؟
تفضل سيدي
3868
الإكسبيرت في المرفقات سيدي
أعتذر عن الإزعاج
shivaa
29-10-2017, 01:21 AM
السلام عليكم
ممكن TrailingStop بالدولار
كنت فى الموقع القديم قد ارفقت لى الداله عن طريق سوتش انا فاكر هذا ولكن لم اجدها
الرجاء ارساله لى
انا شاكر لك
kira-h
29-10-2017, 05:45 PM
برجاء شرح order modify للحالات التاليه
كمثال الاكسبيرت يقوم بفتح صفقه شراء ووضع صفقه معلقه بيع على بعد 50 نقطه كيف يمكن عمل modify للاوردر المعلق بأنه فى حالة تحرك السعر 40 نقطه مثلا فى صفقه الشراء يتم وضع الامر المعلق على نقطه الدخول لصفقه الشراء
السلام عليكم
مثال لدالة تقوم بتعديل سعر الامر المعلق :
void PandingsModify()
{
bool mod;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
double op=OrderOpenPrice();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()>OP_SELL)
{
if(OrderType()==OP_SELLSTOP)
{
double price=Bid-Step*point),
SL=price+Stoploss*point,
TP=price-Takeprofit*point;
if(NormalizeDouble(price,Digits)!=NormalizeDouble( op,Digits))
{
mod=OrderModify(OrderTicket(),price,SL,TP,0,Red);
}
}
}
}
}
kira-h
29-10-2017, 05:52 PM
أخي حسن هناك شيئا ما غير صحيح
الصورة تعبر عن الخطأ ... و هل يمكن
مثلا كل 10 نقاط يتم فتح صفقة إلى حين
تغيير لون الشمعة يتم إغلاق جميع الصفقات
والبداية في صفقات أخرى و هكذا ؟
تفضل سيدي
الإكسبيرت في المرفقات سيدي
أعتذر عن الإزعاج
السلام عليكم
تم التصحيح بالاكسبيرت المرفق
kira-h
29-10-2017, 06:22 PM
السلام عليكم
ممكن TrailingStop بالدولار
كنت فى الموقع القديم قد ارفقت لى الداله عن طريق سوتش انا فاكر هذا ولكن لم اجدها
الرجاء ارساله لى
انا شاكر لك
وعليكم السلام
دالة الترلينغ بالدولار كالتالي :
void Trailing_USD()
{
if(Profit_By_USD()>=TrailingStop_USD&&((GlobalVariableGet(Symbol()+MagicNo+"Step")<(Profit_By_USD()-(TrailingStop_USD-TrailingStep_USD)))
||GlobalVariableGet(Symbol()+MagicNo+"Stop")==0))
{
GlobalVariableSet(Symbol()+MagicNo+"Stop",Profit_By_USD()-TrailingStop_USD);
GlobalVariableSet(Symbol()+MagicNo+"Step",Profit_By_USD()-(TrailingStop_USD-TrailingStep_USD));
}
if(Profit_By_USD()<=GlobalVariableGet(Symbol()+MagicNo+"Step")&&GlobalVariableGet(Symbol()+MagicNo+"Stop")!=0)
{
CloseOrders();
GlobalVariableDel(Symbol()+MagicNo+"Stop");
GlobalVariableDel(Symbol()+MagicNo+"Step");
}
}
بحيث Profit_By_USD دالة اجمالي الربح بالدولار :
double Profit_By_USD(int type=-1)
{
double pts;
for(int i=0;i<OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ot=OrderType();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
if(sy==Symbol()&&mn==MagicNo)
{
if(ot==type||type==-1)
{
pts+=pt+sw+cm;
}
}
}
return(pts);
}
ودالة إغلاق الصفقات :
void CloseOrders(int type=-1)
{
bool select,close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==type||type==-1)
{
if(OrderType()==OP_BUY){close=OrderClose(OrderTick et(),OrderLots(),NormalizeDouble(Bid,Digits),3*Q); }
if(OrderType()==OP_SELL){close=OrderClose(OrderTic ket(),OrderLots(),NormalizeDouble(Ask,Digits),3*Q) ;}
if(OrderType()>OP_SELL){close=OrderDelete(OrderTicket());}
}
}
}
}
والشروط كالتالي :
void OnTick()
{
if(TrailingStop_USD>0&&TrailingStop_USD>=TrailingStep_USD)TrailingUSD();
}
والمتغيرات الخارجية كالتالي:
TrailingStop_USD التريلينغ ستوب بالدولار
TrailingStep_USD الترلينغ ستيب بالدولار
shivaa
01-11-2017, 02:56 AM
السلام عليكم
ممكن شرح دالة WebRequest
وكيف ارسال اميل من اكسبيرت الى gmail
اكون شاكر
kira-h
01-11-2017, 05:37 AM
السلام عليكم
ممكن شرح دالة WebRequest
وكيف ارسال اميل من اكسبيرت الى gmail
اكون شاكر
وعليكم السلام
الدالة WebRequest تحفظ بيانات الصفحة التي ستستدعيها كاملة، راجع الصفحة التالية: WebRequest (https://docs.mql4.com/common/webrequest)
بالنسبة لارسال ايميل من الاكسبيرت ستستخدم الدالة SendMail
مثال :
SendMail("Buy Alert","Buy Market on "+Symbol()+" at price "+Ask);
sal_moh85
01-11-2017, 11:23 AM
سلام عليكم اخ حسن
عندي استفسار بسيط عند 12 متغير بدي اختار اعلى قيمه من 12 متغير
doubleMaxValue=MathMax(MathMax(1,2),MathMax(2,3),M athMax(3,4),MathMax(4,5),MathMax(5,6),MathMax(6,7) ,
MathMax(7,8),MathMax(8,9),MathMax(9,10),MathMax(10 ,11),MathMax(11,12));
ما زبطة معي لانو هو بياخد بس متغيرين
في عندي حل بس كتير طويل باخد كل متغيران بيطلع عندي 6 متغير بعدين بقارن فيهون حتى اصل لاعلى متغير بس كتير طويله الطريقه في طريقه مختصره
وشكرا لك
sal_moh85
01-11-2017, 05:01 PM
سلام عليكم اخ حسن سوال تاني
مثال عندي 24 شمعه عاوز اعراف اكبر High من بين 24 شمعه
واصغر low من بين 24 شمعه
بي الاضافه لي تحديد هل عند تشكل High الشمعه هل هي شراء ام بيع ونفس شي لي low وشكرا
kira-h
01-11-2017, 06:40 PM
سلام عليكم اخ حسن
عندي استفسار بسيط عند 12 متغير بدي اختار اعلى قيمه من 12 متغير
doubleMaxValue=MathMax(MathMax(1,2),MathMax(2,3),M athMax(3,4),MathMax(4,5),MathMax(5,6),MathMax(6,7) ,
MathMax(7,8),MathMax(8,9),MathMax(9,10),MathMax(10 ,11),MathMax(11,12));
ما زبطة معي لانو هو بياخد بس متغيرين
في عندي حل بس كتير طويل باخد كل متغيران بيطلع عندي 6 متغير بعدين بقارن فيهون حتى اصل لاعلى متغير بس كتير طويله الطريقه في طريقه مختصره
وشكرا لك
وعليكم السلام
نعم يوجد طريقة أسهل باستخدام المصفوفة
مثال :
double MyArray[12];//تعريف وتحديد عدد المتغيرات بالمصفوفة
MyArray[0]=1;
MyArray[1]=2;
MyArray[2]=3;
MyArray[3]=4;
MyArray[4]=6;
MyArray[5]=8;
MyArray[6]=1;
MyArray[7]=3;
MyArray[8]=10;
MyArray[9]=5;
MyArray[10]=9;
MyArray[11]=5;
double MaxValue=MyArray[ArrayMaximum(MyArray)]; //النتيجة
Comment(MaxValue);
kira-h
01-11-2017, 06:49 PM
سلام عليكم اخ حسن سوال تاني
مثال عندي 24 شمعه عاوز اعراف اكبر High من بين 24 شمعه
واصغر low من بين 24 شمعه
بي الاضافه لي تحديد هل عند تشكل High الشمعه هل هي شراء ام بيع ونفس شي لي low وشكرا
وعليكم السلام
ستستخدم التالي :
double HighPos=High[iHighest(Symbol(),0,MODE_HIGH,24 ,1)];//أعلى هاي ضمن 24 شمعة سابقة
double LowPos=Low[iLowest(Symbol(),0,MODE_LOW,24,1)];//أقل لو ضمن 24 شمعة سابقة
sal_moh85
01-11-2017, 07:09 PM
وعليكم السلام
ستستخدم التالي :
double HighPos=High[iHighest(Symbol(),0,MODE_HIGH,24 ,1)];//أعلى هاي ضمن 24 شمعة سابقة
double LowPos=Low[iLowest(Symbol(),0,MODE_LOW,24,1)];//أقل لو ضمن 24 شمعة سابقة
مشكور جدا بس كمان طلب 3912
kira-h
01-11-2017, 07:43 PM
مشكور جدا بس كمان طلب 3912
يمكنك أخي معرفة شكل الشمعة من خلال سعر افتتاح واغلاق الشمعة بالوظائف التالية :
double CloseHigh=Close[iHighest(Symbol(),0,MODE_HIGH,24,1)];//سعر اغلاق شمعة اعلى هاي ضمن الفترة
double OpenHigh=Open[iHighest(Symbol(),0,MODE_HIGH,24,1)];//سعر افتتاح شمعة أعلى هاي ضمن الفترة
double CloseLow=Close[iLowest(Symbol(),0,MODE_LOW,24,1)];//سعر اغلاق شمعة اقل لو ضمن الفترة
double OpenLow=Open[iLowest(Symbol(),0,MODE_LOW,24,1)];//سعر افتتاح شمعة أقل لو ضمن الفترة
sal_moh85
01-11-2017, 08:03 PM
يمكنك أخي معرفة شكل الشمعة من خلال سعر افتتاح واغلاق الشمعة بالوظائف التالية :
double CloseHigh=Close[iHighest(Symbol(),0,MODE_HIGH,24,1)];//سعر اغلاق شمعة اعلى هاي ضمن الفترة
double OpenHigh=Open[iHighest(Symbol(),0,MODE_HIGH,24,1)];//سعر افتتاح شمعة أعلى هاي ضمن الفترة
double CloseLow=Close[iLowest(Symbol(),0,MODE_LOW,24,1)];//سعر اغلاق شمعة اقل لو ضمن الفترة
double OpenLow=Open[iLowest(Symbol(),0,MODE_LOW,24,1)];//سعر افتتاح شمعة أقل لو ضمن الفترة
مشكور جدا اخ حسن
Islam
02-11-2017, 12:33 AM
السلام عليكم اخي حسن
سؤالي اخي ما هو الكود الصحيح لتحديد توقيت فتح صفقه معينه
بمعني اخر اخي اذا كنت اريد من الاكسبيرت ان يفتح صفقه بيع عند الساعه ال12 من كل يوم (او مع بدايه افتتاح السوق) فما هو الشرط الكودي الصحيح الذي يجب استخدامه في هذه الحاله ؟
وارجو من الله سبحانه وتعالي ان يجعل عونك لنا اخي حسن في ميزان حسناتك ان شاء الله
kira-h
02-11-2017, 04:00 PM
مشكور جدا اخ حسن
العفو أخي وبالتوفيق إن شاء الله
kira-h
02-11-2017, 04:02 PM
السلام عليكم اخي حسن
سؤالي اخي ما هو الكود الصحيح لتحديد توقيت فتح صفقه معينه
بمعني اخر اخي اذا كنت اريد من الاكسبيرت ان يفتح صفقه بيع عند الساعه ال12 من كل يوم (او مع بدايه افتتاح السوق) فما هو الشرط الكودي الصحيح الذي يجب استخدامه في هذه الحاله ؟
وارجو من الله سبحانه وتعالي ان يجعل عونك لنا اخي حسن في ميزان حسناتك ان شاء الله
وعليكم السلام
بارك الله فيك
ستضيف بشرط فتح الصفقة الشرط التالي :
if(TimeHour(TimeCurrent())==12)
sal_moh85
02-11-2017, 06:47 PM
سلام عليكم اخ حسن يعطيك الصحه والعافيه على مساعدتك
انا عم استخدم كود المضاعفات الضرب على الاوامر المعلقه بس حصل عندي مشكله
المشكله هي عند خسارة الصفقه يفتح صفقه مضاعفه بي امر معلق ان لم تتفعل الصفقه وانا محدد توقيت لي حذف عند حذف الصفقه يرجع قيمة لوت افتراضي
وشكرا لك
kira-h
02-11-2017, 07:05 PM
سلام عليكم اخ حسن يعطيك الصحه والعافيه على مساعدتك
انا عم استخدم كود المضاعفات الضرب على الاوامر المعلقه بس حصل عندي مشكله
المشكله هي عند خسارة الصفقه يفتح صفقه مضاعفه بي امر معلق ان لم تتفعل الصفقه وانا محدد توقيت لي حذف عند حذف الصفقه يرجع قيمة لوت افتراضي
وشكرا لك
وعليكم السلام
لم أفهم المشكلة ولا المطلوب! لذلك اشرح بطريقة أفضل وان ترفق الكود أو الجزء الذي به الخطأ لاصلاحه
NabileFX
02-11-2017, 07:15 PM
تحية طيبة للجميع،
أريد معرفة اين يوجد الخطأ في الاكسبير المرفق، لأنه لا يفتح الصفقات في التوقيت المحدد لها.
و شكرا مسبقا أخي حسن..
//+------------------------------------------------------------------+
//| PendingOrders.mq4 |
//| Copyright 2017, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
extern double lot=0.1;
extern int takeprofit=150;
extern int stoploss=150;
extern string s="Candle Number at wich you want to place orders 0,1,2,3(is the 4rth candle)";
extern int opentime=4;
extern string r="Candle Number at wich you want to close market orders and delete pending orders";
extern int closetime=20;
extern int magic=3247;
extern double g=150;
bool check=true;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
bool t=checktime();
if(OrdersTotal()==0)
{
if(t==true&&check==true)
{
openbuystop();
opensellstop();
check=false;
}
else if(t==false)
{
closebuy();
closesell();
deletepending();
check=true;
}
}
else if(OrdersTotal()==1)
{
deletepending();
}
}
//+------------------------------------------------------------------+
// Functions for opening buystops and sellstops
void openbuystop()
{
if(OrderSend(Symbol(),OP_BUYSTOP,lot,Ask+g*Point,3 ,Bid+g*Point-stoploss*Point,Ask+g*Point+takeprofit*Point,NULL,m agic,0,Blue)==true)
{
Alert("Order Sent !!");
}
else
Fun_error(GetLastError());
}
void opensellstop()
{
if(OrderSend(Symbol(),OP_SELLSTOP,lot,Bid-g*Point,3,Ask-g*Point+stoploss*Point,Bid-g*Point-takeprofit*Point,NULL,magic,0,Red)==true)
{
Alert("Order Sent !!");
}
else
Fun_error(GetLastError());
}
void closebuy()
{
for(int j=1;j<=OrdersTotal();j++)
{
OrderSelect(j-1,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY&&OrderMagicNumber()==magic)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ;
PlaySound("alert2.wav");
}
}
}
void closesell()
{
for(int j=1;j<=OrdersTotal();j++)
{
OrderSelect(j-1,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_SELL&&OrderMagicNumber()==magic)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ;
PlaySound("alert2.wav");
}
}
}
int Fun_error(int Error)
{
switch(Error)
{
case 4:Alert("Trade server is busy. Trying once again..");
Sleep(3000);
return(1);
case 135:Alert("Price changed.Trying once again..");
RefreshRates();
return(1);
case 136:Alert(" No Prices. Waiting for a new tick..");
while(RefreshRates()==false)
Sleep(1);
return(1);
case 137:Alert("Broker is busy. Trying once again..");
Sleep(3000);
return(1);
case 146:Alert("Trading subsystem is busy. Trying once again..");
Sleep(500);
return(1);
// Critical errors
case 2:Alert("Common error");
return(0);
case 5:Alert("Old terminal version");
return(0);
case 64:Alert("Account blocked.");
return(0);
case 133:Alert("Trading forbidden.");
return(0);
case 134:Alert("Not enough money to execute operation.");
return(0);
default:Alert("Error occurred :", Error);
return(0);
}
}
// Checking time for placing any orders
bool checktime()
{
int i=0;
int hourtime=TimeHour(Time[i]);
if(hourtime==opentime)
{
return(true);
}
else if(hourtime==closetime)
{
return(false);
}
else
return(EMPTY_VALUE);
}
void deletepending()
{
for(int w=0;w<OrdersTotal();w++)
{
OrderSelect(w,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUYSTOP||OrderType()==OP_SELLST OP)
{
OrderDelete(OrderTicket());
}
}
}
sal_moh85
02-11-2017, 07:47 PM
وعليكم السلام
لم أفهم المشكلة ولا المطلوب! لذلك اشرح بطريقة أفضل وان ترفق الكود أو الجزء الذي به الخطأ لاصلاحه
كود هوه نفسه يعمل بشكل صحيح مع اوامر المباشره متل شراء او بيع بسب قرائته لوت من الهستوري
مثال لتوضيح المشكله
عندي صفقتين معلقتين باي ستوب وسيل ستوب وقت حذف الصفقات لي كلا الصفقتين 60 دقيقه
على فرض تفعيل صفقة باي ستوب واغلقة على خساره ومضة 60 دقيقه وحذف امر الثاني سيل ستوب ولوت الافتراضي 0.10
ومن جديد وضع امرين باي ستوب وسيل ستوب بي مضاعفات اي اصبح لوت 0.2 ولم تتفعل الصفقتان وحذف الامرين
هنا المشكله عند تفعيل مره الثالثه يفتح الصفقات بي لوت 0.10 وشكرا
kira-h
02-11-2017, 10:04 PM
تحية طيبة للجميع،
أريد معرفة اين يوجد الخطأ في الاكسبير المرفق، لأنه لا يفتح الصفقات في التوقيت المحدد لها.
و شكرا مسبقا أخي حسن..
//+------------------------------------------------------------------+
//| PendingOrders.mq4 |
//| Copyright 2017, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
extern double lot=0.1;
extern int takeprofit=150;
extern int stoploss=150;
extern string s="Candle Number at wich you want to place orders 0,1,2,3(is the 4rth candle)";
extern int opentime=4;
extern string r="Candle Number at wich you want to close market orders and delete pending orders";
extern int closetime=20;
extern int magic=3247;
extern double g=150;
bool check=true;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
bool t=checktime();
if(OrdersTotal()==0)
{
if(t==true&&check==true)
{
openbuystop();
opensellstop();
check=false;
}
else if(t==false)
{
closebuy();
closesell();
deletepending();
check=true;
}
}
else if(OrdersTotal()==1)
{
deletepending();
}
}
//+------------------------------------------------------------------+
// Functions for opening buystops and sellstops
void openbuystop()
{
if(OrderSend(Symbol(),OP_BUYSTOP,lot,Ask+g*Point,3 ,Bid+g*Point-stoploss*Point,Ask+g*Point+takeprofit*Point,NULL,m agic,0,Blue)==true)
{
Alert("Order Sent !!");
}
else
Fun_error(GetLastError());
}
void opensellstop()
{
if(OrderSend(Symbol(),OP_SELLSTOP,lot,Bid-g*Point,3,Ask-g*Point+stoploss*Point,Bid-g*Point-takeprofit*Point,NULL,magic,0,Red)==true)
{
Alert("Order Sent !!");
}
else
Fun_error(GetLastError());
}
void closebuy()
{
for(int j=1;j<=OrdersTotal();j++)
{
OrderSelect(j-1,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY&&OrderMagicNumber()==magic)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ;
PlaySound("alert2.wav");
}
}
}
void closesell()
{
for(int j=1;j<=OrdersTotal();j++)
{
OrderSelect(j-1,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_SELL&&OrderMagicNumber()==magic)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ;
PlaySound("alert2.wav");
}
}
}
int Fun_error(int Error)
{
switch(Error)
{
case 4:Alert("Trade server is busy. Trying once again..");
Sleep(3000);
return(1);
case 135:Alert("Price changed.Trying once again..");
RefreshRates();
return(1);
case 136:Alert(" No Prices. Waiting for a new tick..");
while(RefreshRates()==false)
Sleep(1);
return(1);
case 137:Alert("Broker is busy. Trying once again..");
Sleep(3000);
return(1);
case 146:Alert("Trading subsystem is busy. Trying once again..");
Sleep(500);
return(1);
// Critical errors
case 2:Alert("Common error");
return(0);
case 5:Alert("Old terminal version");
return(0);
case 64:Alert("Account blocked.");
return(0);
case 133:Alert("Trading forbidden.");
return(0);
case 134:Alert("Not enough money to execute operation.");
return(0);
default:Alert("Error occurred :", Error);
return(0);
}
}
// Checking time for placing any orders
bool checktime()
{
int i=0;
int hourtime=TimeHour(Time[i]);
if(hourtime==opentime)
{
return(true);
}
else if(hourtime==closetime)
{
return(false);
}
else
return(EMPTY_VALUE);
}
void deletepending()
{
for(int w=0;w<OrdersTotal();w++)
{
OrderSelect(w,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUYSTOP||OrderType()==OP_SELLST OP)
{
OrderDelete(OrderTicket());
}
}
}
أهلا أخي
الصحيح كالتالي :
//+------------------------------------------------------------------+
//| PendingOrders.mq4 |
//| Copyright 2017, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
extern double lot=0.1;
extern int takeprofit=150;
extern int stoploss=150;
extern string s="Candle Number at wich you want to place orders 0,1,2,3(is the 4rth candle)";
extern int opentime=4;
extern string r="Candle Number at wich you want to close market orders and delete pending orders";
extern int closetime=20;
extern int magic=3247;
extern double g=150;
bool check=true;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
int t=checktime();
if(OrdersTotal()==0)
{
if(t==0&&check==true)
{
openbuystop();
opensellstop();
check=false;
}
else if(t==1)
{
closebuy();
closesell();
deletepending();
check=true;
}
}
else if(OrdersTotal()==1)
{
deletepending();
}
}
// Checking time for placing any orders
int checktime()
{
int hourtime=TimeHour(Time[1]);
if(hourtime==opentime)
{
return(0);
}
else if(hourtime==closetime)
{
return(1);
}
else
return(2);
}
//+------------------------------------------------------------------+
// Functions for opening buystops and sellstops
void openbuystop()
{
if(OrderSend(Symbol(),OP_BUYSTOP,lot,Ask+g*Point,3 ,Bid+g*Point-stoploss*Point,Ask+g*Point+takeprofit*Point,NULL,m agic,0,Blue)==true)
{
Alert("Order Sent !!");
}
else
Fun_error(GetLastError());
}
void opensellstop()
{
if(OrderSend(Symbol(),OP_SELLSTOP,lot,Bid-g*Point,3,Ask-g*Point+stoploss*Point,Bid-g*Point-takeprofit*Point,NULL,magic,0,Red)==true)
{
Alert("Order Sent !!");
}
else
Fun_error(GetLastError());
}
void closebuy()
{
for(int j=1;j<=OrdersTotal();j++)
{
OrderSelect(j-1,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY&&OrderMagicNumber()==magic)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ;
PlaySound("alert2.wav");
}
}
}
void closesell()
{
for(int j=1;j<=OrdersTotal();j++)
{
OrderSelect(j-1,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_SELL&&OrderMagicNumber()==magic)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ;
PlaySound("alert2.wav");
}
}
}
int Fun_error(int Error)
{
switch(Error)
{
case 4:Alert("Trade server is busy. Trying once again..");
Sleep(3000);
return(1);
case 135:Alert("Price changed.Trying once again..");
RefreshRates();
return(1);
case 136:Alert(" No Prices. Waiting for a new tick..");
while(RefreshRates()==false)
Sleep(1);
return(1);
case 137:Alert("Broker is busy. Trying once again..");
Sleep(3000);
return(1);
case 146:Alert("Trading subsystem is busy. Trying once again..");
Sleep(500);
return(1);
// Critical errors
case 2:Alert("Common error");
return(0);
case 5:Alert("Old terminal version");
return(0);
case 64:Alert("Account blocked.");
return(0);
case 133:Alert("Trading forbidden.");
return(0);
case 134:Alert("Not enough money to execute operation.");
return(0);
default:Alert("Error occurred :", Error);
return(0);
}
}
void deletepending()
{
for(int w=0;w<OrdersTotal();w++)
{
OrderSelect(w,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUYSTOP||OrderType()==OP_SELLST OP)
{
OrderDelete(OrderTicket());
}
}
}
NabileFX
03-11-2017, 02:09 AM
تحياتي أستاذ حسن، أنت بالفعل إنسان طيب، و بأر لا ينظب..
بالفعل الاكسبرت اصبح يفتح الصفقات وفق ما تم تصوره.
لكن لم استوعب جيدا الفرق بين نوعية الدالة السابقة bool و الدالة المعدلة int. أو بصيغة أخرى لما لم يشتغل بالدالة السابقة و اشتغل بالدالة المعدلة، مع العلم أن الكود السابق كان صحيحا؟؟
و الملاحظة الثانية هي أن الاكسبيرت يخرج في "التيرمينال" Terminal على أن هناك خطأ ما قد حدث و يطبع العبارة التالية : Error occurred :0، عكس طباعة العبارة :!!Order Sent، في حالةعدم وجود أي خطأ.
أتمنى أن لا تزعجك كثرة اسئلتي و إلحاحي " صاحب الحاجة أعمى ".
kira-h
03-11-2017, 02:20 AM
كود هوه نفسه يعمل بشكل صحيح مع اوامر المباشره متل شراء او بيع بسب قرائته لوت من الهستوري
مثال لتوضيح المشكله
عندي صفقتين معلقتين باي ستوب وسيل ستوب وقت حذف الصفقات لي كلا الصفقتين 60 دقيقه
على فرض تفعيل صفقة باي ستوب واغلقة على خساره ومضة 60 دقيقه وحذف امر الثاني سيل ستوب ولوت الافتراضي 0.10
ومن جديد وضع امرين باي ستوب وسيل ستوب بي مضاعفات اي اصبح لوت 0.2 ولم تتفعل الصفقتان وحذف الامرين
هنا المشكله عند تفعيل مره الثالثه يفتح الصفقات بي لوت 0.10 وشكرا
اخي اين الكود لتصحيحه،
kira-h
03-11-2017, 02:24 AM
تحياتي أستاذ حسن، أنت بالفعل إنسان طيب، و بأر لا ينظب..
بالفعل الاكسبرت اصبح يفتح الصفقات وفق ما تم تصوره.
لكن لم استوعب جيدا الفرق بين نوعية الدالة السابقة bool و الدالة المعدلة int. أو بصيغة أخرى لما لم يشتغل بالدالة السابقة و اشتغل بالدالة المعدلة، مع العلم أن الكود السابق كان صحيحا؟؟
و الملاحظة الثانية هي أن الاكسبيرت يخرج في "التيرمينال" Terminal على أن هناك خطأ ما قد حدث و يطبع العبارة التالية : Error occurred :0، عكس طباعة العبارة :!!Order Sent، في حالةعدم وجود أي خطأ.
أتمنى أن لا تزعجك كثرة اسئلتي و إلحاحي " صاحب الحاجة أعمى ".
العفو أخي
تلك الدالة غير منطقية لأنه يوجد 3 حالات توقيت الفتح وتوقيت الاغلاق ودونهما ، وباستخدام bool لن يأخد إلا حالتين true أو false وبالتالي الحالة الثالثة لا تتحقق
لهذا استخدمت int لجعل كل حالة برقم معين بحيث توقيت الفتح يعود برقم 0 وتوقيت الاغلاق يعود برقم 1 ودونهما يعود برقم 2
بالنسبة للسؤال الثاني ارفق صورة للخطأ بالجورنال ...
sal_moh85
03-11-2017, 11:19 AM
اخي اين الكود لتصحيحه،
سلام عليكم هاد الكود اخي
NabileFX
03-11-2017, 12:52 PM
صورة الجورنال ويظهر من خلالها ما أشرت إليه سابقا.
3960
غلباوى
03-11-2017, 03:07 PM
السلام عليكم ورحمة الله وبركاتة
اخى حسن لدى استفسار برمجى
فى حالة الاخبار والحركة السريعة فى السوق قد يحدث تحقق لشروط الاستراتيجية
انا اريد ان يتحقق الاكسيبرت من فتح الصفقة ام لا بمعنى
تحقق الان شرط البيع واخذ الاكسيبرت الامر واغلقت الصفقة اريد من الاكسيبرت ان يتحقق فاذا وجد ان الامر تم فلا ياخذ صفقة اخرى اما اذا لم ياخذ صفقة يقوم باخذ الصفقة
فكيف اخبر الاكسيبرت بذلك
وشكرا
kira-h
03-11-2017, 05:25 PM
صورة الجورنال ويظهر من خلالها ما أشرت إليه سابقا.
هذا ليس خطأ صادر من محلل المنصة بل نتيجة دالة الاخطاء الموجودة بالكود Fun_error مفادها تنبيه بهذا الخطأ عند عدم وجود معنى الخطأ بقائمة الأخطاء
default:Alert("Error occurred :", Error);
لهذا لن تستطيع معرفة معنى الخطأ، لأن القائمة قصيرة، وطبعا يوجد الكثير من الاخطاء كما ترى بالموقع الرسمي للغة
https://book.mql4.com/appendix/errors
لهذا الأفضل استخدام مكتبات جاهزة بالمنصة لمعرفة الأخطاء ونوعها
#include <stdlib.mqh>
#include <WinUser32.mqh>
ويصبح الكود كالتالي :
//+------------------------------------------------------------------+
//| PendingOrders.mq4 |
//| Copyright 2017, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
#include <stdlib.mqh>
#include <WinUser32.mqh>
extern double lot=0.1;
extern int takeprofit=150;
extern int stoploss=150;
extern string s="Candle Number at wich you want to place orders 0,1,2,3(is the 4rth candle)";
extern int opentime=4;
extern string r="Candle Number at wich you want to close market orders and delete pending orders";
extern int closetime=20;
extern int magic=3247;
extern double g=150;
bool check=true;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
int t=checktime();
if(OrdersTotal()==0)
{
if(t==0&&check==true)
{
openbuystop();
opensellstop();
check=false;
}
else if(t==1)
{
closebuy();
closesell();
deletepending();
check=true;
}
}
else if(OrdersTotal()==1)
{
deletepending();
}
}
// Checking time for placing any orders
int checktime()
{
int hourtime=TimeHour(Time[1]);
if(hourtime==opentime)
{
return(0);
}
else if(hourtime==closetime)
{
return(1);
}
else
return(2);
}
//+------------------------------------------------------------------+
// Functions for opening buystops and sellstops
void openbuystop()
{
if(OrderSend(Symbol(),OP_BUYSTOP,lot,Ask+g*Point,3 ,Bid+g*Point-stoploss*Point,Ask+g*Point+takeprofit*Point,NULL,m agic,0,Blue)==true)
{
Alert("Order Sent !!");
}
else
Print("error-",ErrorDescription(GetLastError()));
}
void opensellstop()
{
if(OrderSend(Symbol(),OP_SELLSTOP,lot,Bid-g*Point,3,Ask-g*Point+stoploss*Point,Bid-g*Point-takeprofit*Point,NULL,magic,0,Red)==true)
{
Alert("Order Sent !!");
}
else
Print("error-",ErrorDescription(GetLastError()));
}
void closebuy()
{
for(int j=1;j<=OrdersTotal();j++)
{
bool select=OrderSelect(j-1,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY&&OrderMagicNumber()==magic)
{
bool close=OrderClose(OrderTicket(),OrderLots(),Bid,3,V iolet);
PlaySound("alert2.wav");
}
}
}
void closesell()
{
for(int j=1;j<=OrdersTotal();j++)
{
bool select=OrderSelect(j-1,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_SELL&&OrderMagicNumber()==magic)
{
bool close=OrderClose(OrderTicket(),OrderLots(),Bid,3,V iolet);
PlaySound("alert2.wav");
}
}
}
void deletepending()
{
for(int w=0;w<OrdersTotal();w++)
{
bool select=OrderSelect(w,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUYSTOP||OrderType()==OP_SELLST OP)
{
bool close=OrderDelete(OrderTicket());
}
}
}
kira-h
03-11-2017, 05:38 PM
السلام عليكم ورحمة الله وبركاتة
اخى حسن لدى استفسار برمجى
فى حالة الاخبار والحركة السريعة فى السوق قد يحدث تحقق لشروط الاستراتيجية
انا اريد ان يتحقق الاكسيبرت من فتح الصفقة ام لا بمعنى
تحقق الان شرط البيع واخذ الاكسيبرت الامر واغلقت الصفقة اريد من الاكسيبرت ان يتحقق فاذا وجد ان الامر تم فلا ياخذ صفقة اخرى اما اذا لم ياخذ صفقة يقوم باخذ الصفقة
فكيف اخبر الاكسيبرت بذلك
وشكرا
وعليكم السلام
طبعا إذا تم فتح الصفقة فلن يفتح مرة أخرى بناءا على الشروط التي قمت بها
الان المشكلة إذا لم يفتح الصفقة سنضيف شرط عدد محاولات فتح الصفقة وكذلك لا تنسى قيمة السليباج
مثال :
if(_Digits==5||_Digits==3)int Q=10;else Q=1;
int Try ;
//if(.......)شروط فتح الصفقة
{
int ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDou ble(Ask,Digits),Slippage*Q,0,0,"Kira-h",MagicNo,0,Blue);
while(ticket<0&&Try<OpenOrderTry)
{
if(IsTradeAllowed())ticket=OrderSend(Symbol(),OP_B UY,Lots,NormalizeDouble(Ask,Digits),Slippage*Q,0,0 ,"Kira-h",MagicNo,0,Blue);
Sleep(1000);Try++;
}
}
بحيث OpenOrderTry متغير خارجي تحدد فيه عدد محاولات فتح الصفقة، وهي محاول كل ثانية
و Slippage متغير خارجي تحدد فيه عدد النقاط المسموح به بإعادة التسعير أو الانزلاق السعري
input int OpenOrderTry=5;
input int Slippage=5;
kira-h
03-11-2017, 06:10 PM
سلام عليكم هاد الكود اخي
وعليكم السلام
مرفق الكود المعدل
والخطأ لديك فقط بالدالة LastOrder بحيث يجب البحث فقط بالصفقات المفعلة وليس كل الصفقات
sal_moh85
03-11-2017, 06:43 PM
وعليكم السلام
مرفق الكود المعدل
والخطأ لديك فقط بالدالة LastOrder بحيث يجب البحث فقط بالصفقات المفعلة وليس كل الصفقات
مشكور اخ حسن
غلباوى
04-11-2017, 02:43 AM
وعليكم السلام
طبعا إذا تم فتح الصفقة فلن يفتح مرة أخرى بناءا على الشروط التي قمت بها
الان المشكلة إذا لم يفتح الصفقة سنضيف شرط عدد محاولات فتح الصفقة وكذلك لا تنسى قيمة السليباج
مثال :
if(_Digits==5||_Digits==3)int Q=10;else Q=1;
int Try;
//if(.......)شروط فتح الصفقة
{
int ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDou ble(Ask,Digits),Slippage*Q,0,0,"Kira-h",MagicNo,0,Blue);
while(ticket<0&&Try<OpenOrderTry)
{
if(IsTradeAllowed())ticket=OrderSend(Symbol(),OP_B UY,Lots,NormalizeDouble(Ask,Digits),Slippage*Q,0,0 ,"Kira-h",MagicNo,0,Blue);
Sleep(1000);Try++;
}
}
بحيث OpenOrderTry متغير خارجي تحدد فيه عدد محاولات فتح الصفقة، وهي محاول كل ثانية
و Slippage متغير خارجي تحدد فيه عدد النقاط المسموح به بإعادة التسعير أو الانزلاق السعري
input int OpenOrderTry=5;
input int Slippage=5;
السلام عليكم ورحمة الله وبركاتة
الف شكر اخى
مرفق الكود ممكن تقولى اضع الكود فين بالظبط
والف شكر اخى
void OnDeinit(const int reason)
{
}
double DoublecciW(int index,int shift)
{
double Doublecci=iCustom(NULL,0,"FS30",index,shift);
return(Doublecci);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double hour=Hour()+Minute()/100.0;
datetime start_= StrToTime(TimeToStr(TimeCurrent(), TIME_DATE) + " " + Time_Start);
datetime end= StrToTime(TimeToStr(TimeCurrent(), TIME_DATE) + " " + Time_End);
bool time=(Time[0]>=start_ && Time[0]<=end);
bool end_time=(Time[0]>=end);
int doublecci_signal;
if (DoublecciW(2,1)<5000&&DoublecciW(2,2)>5000)doublecci_signal=1;
if (DoublecciW(3,1)<5000&&DoublecciW(3,2)>5000)doublecci_signal=-1;
if(doublecci_signal==1)nam_B="OP_BUY";else{nam_B="NO";}
if(doublecci_signal==-1)nam_S="OP_SELL";else{nam_S="NO";}
if(time==true&&nam_B=="OP_BUY"&&ordestotal1_2(OP_BUY)==0&&ordestotal1_2(OP_SELL)==0){//&&lastorder!=1){lastorder=1;
open(OP_BUY,Lots(MaxRisk),Ask,TakeProfit,StopLoss) ;
}
if(time==true&&nam_S=="OP_SELL"&&ordestotal1_2(OP_SELL)==0&&ordestotal1_2(OP_BUY)==0){//&&lastorder!=-1){lastorder=-1;
open(OP_SELL,Lots(MaxRisk),Bid,TakeProfit,StopLoss ) ;
}
int B=0;
for( B=0;B<OrdersTotal();B++){
if(OrderSelect(B,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()==MagicNumber&&OrderSymbol()==Symbol()){
lot_A = OrderLots(); openprice=OrderOpenPrice();typeo1=OrderType();
}
}
double L=lot_A*2;
if(Multiplication){
if(typeo1==OP_SELL&&nam_B=="OP_BUY"&&ordestotal1_2(OP_BUY)>=0&&ordestotal1_2(OP_SELL)>=1&&TB!=Time[0]){
open(OP_BUY,L,Ask,0,StopLoss) ;
TB=Time[0];
}
if(typeo1==OP_BUY&&nam_S=="OP_SELL"&&ordestotal1_2(OP_SELL)>=0&&ordestotal1_2(OP_BUY)>=1&&TS!=Time[0]){
open(OP_SELL,L,Bid,0,StopLoss) ;
TS=Time[0];
}
}
Comment(nam_S," ",nam_B," ",L," ",ordestotal1());
if(Close_At_Next&&nam_S=="OP_SELL")closeordar(OP_BUY);
if(Close_At_Next&&nam_B=="OP_BUY")closeordar(OP_SELL);
if(pofet()>=0)color_pofet=Lime;
if(pofet()<0)color_pofet=Red;
if(ordestotal1()>1){removTPSL(OP_BUY); removTPSL(OP_SELL); }
if(ordestotal1()>1&&win_USD>0&&pofet()>=win_USD)CloseDeleteAll();
if(TrailingStop>0)MoveTrailingStop();
if(BreakEven>0)MoveBreakEven();
ObjectCreate("X01_LabelRGE2", OBJ_LABEL, 0, 0, 0);
ObjectSetText("X01_LabelRGE2", "AccountEquity", 12, "", LightGreen);
ObjectSet("X01_LabelRGE2", OBJPROP_CORNER,1);
ObjectSet("X01_LabelRGE2", OBJPROP_XDISTANCE,80);
ObjectSet("X01_LabelRGE2", OBJPROP_YDISTANCE,20);
ObjectCreate("X01_ValueRGE3", OBJ_LABEL, 0, 0, 0);
ObjectSetText("X01_ValueRGE3", " " + DoubleToStr(AccountEquity(), 0), 12, "", Lime);
ObjectSet("X01_ValueRGE3", OBJPROP_CORNER,1);
ObjectSet("X01_ValueRGE3", OBJPROP_XDISTANCE, 21);
ObjectSet("X01_ValueRGE3", OBJPROP_YDISTANCE, 20);
ObjectCreate("eX01_LabelRGE1", OBJ_LABEL, 0, 0, 0);
ObjectSetText("eX01_LabelRGE1", "pofet", 12, "", Plum);
ObjectSet("eX01_LabelRGE1", OBJPROP_CORNER,1);
ObjectSet("eX01_LabelRGE1", OBJPROP_XDISTANCE,80);
ObjectSet("eX01_LabelRGE1", OBJPROP_YDISTANCE, 40);
ObjectCreate("eX01_ValueRGE", OBJ_LABEL, 0, 0, 0);
ObjectSetText("eX01_ValueRGE", " " + DoubleToStr(pofet(), 0), 12, "", color_pofet);
ObjectSet("eX01_ValueRGE", OBJPROP_CORNER,1);
ObjectSet("eX01_ValueRGE", OBJPROP_XDISTANCE, 21);
ObjectSet("eX01_ValueRGE", OBJPROP_YDISTANCE, 40);
}
//+------------------------------------------------------------------+
int open(int ty,double lott,double prc,int pof,int sll)
{
double sl=0,tp=0;
bool modi;
if(ty==OP_BUY || ty==OP_BUYSTOP || ty==OP_BUYLIMIT)
{
if(sll>0){sl=prc-(sll*pt);}else{sl=0;}
if(pof>0){tp=prc+(pof*pt);}else{tp=0;}
clr=Green;
T="Ask ";
pr=NormalizeDouble(Ask,Digits);
}
if(ty==OP_SELL || ty==OP_SELLSTOP || ty==OP_SELLLIMIT)
{
if(sll>0){sl=prc+(sll*pt);}else{sl=0;}
if(pof>0){tp=prc-(pof*pt);}else{tp=0;}
clr=Red;
T="Bid";
pr=NormalizeDouble(Bid,Digits);
}
int tik=OrderSend(Symbol()
,ty
,lott
,NormalizeDouble(prc,Digits)
,10
,0
,0
,"sayed"
,MagicNumber
,0
,clr);
string t;
if(ty==OP_BUY)t="BUY";if(ty==OP_SELL)t="SELL";if(ty==OP_BUYSTOP)t="BUY STOP";if(ty==OP_SELLSTOP)t="SELL STOP";if(ty==OP_BUYLIMIT)t="BUY LIMIT";if(ty==OP_SELLLIMIT)t="SELL LIMIT";
if(tik>0)
{
if(tp>0 || sl>0)modi=OrderModify(tik,prc,NormalizeDouble(sl,Digi ts),NormalizeDouble(tp,Digits),0,CLR_NONE); else modi=true;
if(!modi){Print("Modify Err#= ",GetLastError()," ",Symbol()," ",Period()," Open Price= ",DoubleToStr(prc,Digits)," SL= ",DoubleToStr(sl,Digits)," Tp= ",DoubleToStr(tp,Digits));}
Print("Order Opened successfully " ,"Type ",t," LotSize ",lott," Price ",DoubleToStr(prc,Digits)," TP ",DoubleToStr(tp,Digits)," SL ",DoubleToStr(sl,Digits));
}
else
{
Print("OrderSend failed with error #",GetLastError(), " Type ",t," LotSize= ",lott," ",T,"Now= ",DoubleToStr(pr,Digits)," Price= ",DoubleToStr(prc,Digits)," TP= ",DoubleToStr(tp,Digits)," SL= ",DoubleToStr(sl,Digits)," Spread= ",MarketInfo(Symbol(),MODE_SPREAD));
}
//////
return(tik);
}
int ordestotal1_2(int type)
{
int total_2=0;
for(int b=0;b<OrdersTotal();b++){
if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()&&OrderType()==type){
total_2++;
}
}
return(total_2);
}
int ordestotal1()
{
int total_2=0;
for(int b=0;b<OrdersTotal();b++){
if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()){
total_2++;
}
}
return(total_2);
}
double Lots(double risk)
{
double Lot;
if(Auto_Lots)
{
if(risk>1)risk=1;
//__________________________________________________ _______________________________________
double Min_Lot = MarketInfo(Symbol(), MODE_MINLOT);
double Max_Lot = MarketInfo(Symbol(), MODE_MAXLOT);
double lot_step= MarketInfo(Symbol(), MODE_LOTSTEP);
Lot=NormalizeDouble(AccountBalance()*risk/100/10,2);
Lot=NormalizeDouble(Lot,2);
Lot=NormalizeDouble(Lot/lot_step,0)*lot_step;
if (Lot < Min_Lot) Lot = Min_Lot;
if (Lot > Max_Lot) Lot = Max_Lot;
//__________________________________________________ _______________________________________
}
else Lot=Lot1;
return(Lot);
}
bool CloseDeleteAll()
{
int total = OrdersTotal();
for (int cnt = total-1 ; cnt >=0 ; cnt--)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
{
if(OrderMagicNumber()==MagicNumber&&OrderSymbol()==Symbol()){
switch(OrderType())
{
case OP_BUY :
{
if(!OrderClose(OrderTicket(),OrderLots(),MarketInf o(OrderSymbol(),MODE_BID),0,Violet))
return(false);
}break;
case OP_SELL :
{
if(!OrderClose(OrderTicket(),OrderLots(),MarketInf o(OrderSymbol(),MODE_ASK),0,Violet))
return(false);
}break;
}
if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP || OrderType()==OP_BUYLIMIT || OrderType()==OP_SELLLIMIT)
if(!OrderDelete(OrderTicket()))
{
Print("Error deleting " + (string)OrderType() + " order : ",GetLastError());
return (false);
} }
}
}
return (true);
}
double pofet(){
double pr1=0;
for(int p=0;p<OrdersTotal();p++){
if(OrderSelect(p,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()==MagicNumber&&OrderSymbol()==Symbol()){
pr1=pr1+OrderProfit();
}
}return(pr1);
}
double pofet_H(){
double pr1=0;
for(int p=0;p<OrdersHistoryTotal();p++){
if(OrderSelect(p,SELECT_BY_POS,MODE_HISTORY))
if(OrderMagicNumber()==MagicNumber&&OrderSymbol()==Symbol()){
pr1=OrderProfit();
}
}return(pr1);
}
datetime CloseTime(){
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
return((int)OrderCloseTime());
}
}
return(0);
}
void closeordar(int typer){
for(int c=0;c<OrdersTotal();c++){
if(OrderSelect(c,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()==MagicNumber&&OrderSymbol()==Symbol()&&OrderType()== typer){
if(OrderType()==OP_BUY)bool n=OrderClose(OrderTicket(),OrderLots(),Bid,30);
if(OrderType()==OP_SELL)bool m=OrderClose(OrderTicket(),OrderLots(),Ask,30);
RefreshRates();
}
}
}
void MoveTrailingStop()
{
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0&&NormalizeDouble(Ask-TrailingStep*pt,Digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*pt,D igits))
{
if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-TrailingStop*pt,Digits))||(OrderStopLoss()==0))
{
bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(Bid-TrailingStop*pt,Digits),OrderTakeProfit(),0,Blue);
}
}
}
else
{
if(TrailingStop>0&&NormalizeDouble(Bid+TrailingStep*pt,Digits)<NormalizeDouble(OrderOpenPrice()-TrailingStop*pt,Digits))
{
if((NormalizeDouble(OrderStopLoss(),Digits)>(NormalizeDouble(Ask+TrailingStop*pt,Digits)))||(O rderStopLoss()==0))
{
bool mnm=OrderModify(OrderTicket(),OrderOpenPrice(),Nor malizeDouble(Ask+TrailingStop*pt,Digits),OrderTake Profit(),0,Red);
}
}
}
}
}
}
void MoveBreakEven()
{
int cnt,total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
if(BreakEven>0)
{
if(NormalizeDouble((Bid-OrderOpenPrice()),Digits)>BreakEven*pt)
{
if(NormalizeDouble((OrderStopLoss()-OrderOpenPrice()),Digits)<0)
{
bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(OrderOpenPrice()+movestopto*pt,Digits) ,OrderTakeProfit(),0,Blue);
}
}
}
}
else
{
if(BreakEven>0)
{
if(NormalizeDouble((OrderOpenPrice()-Ask),Digits)>BreakEven*pt)
{
if(NormalizeDouble((OrderOpenPrice()-OrderStopLoss()),Digits)<0)
{
bool nn=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(OrderOpenPrice()-movestopto*pt,Digits),OrderTakeProfit(),0,Red);
}
}
}
}
}
}
}
//--------------------------------------------
void removTPSL(int type)
{
for(int i = OrdersTotal()-1; i >= 0; i--)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber )
if(type == OP_BUY || type == OP_SELL)
bool k= OrderModify(OrderTicket(),OrderOpenPrice(),0,0,0,c lrNONE);
elhelaly
04-11-2017, 02:50 PM
السلام عليكم انا صممت او قدرت افهم الدوال الموجوده فى الاكسبيرت دا حتى الان لكنى لا استطيع فهم كيفية ربط هذه الدوال داخل الداله on tick كمثال
لعمل اكسبيرت يقوم عند وضعه على الشارت بفتح صفقه شراء او بيع ويتم ذلك من خلال الاختيارات فى enum
ثم يقوم بوضع صفقه معاكسه للمفتوحه اولا op_buystop او op_sellstop بعقد مضاعف وبعد تفعلها يضيف صفقه معاكسه وهكذا حتى يتم ضرب الهدف لاحدى الصفقات فيعود للعمل من البدايه انا لا اريد الاكسبيرت ولكن اريد الشرح فضلا وليس امرا
برجاء اخواننا الكرام شرح عمل ذلك ولكن بطريقه سهله وان امكن داخل الكود لاننى اريد فهم ذلك
مرفق الكود
//| my expert.mq4 |
//| Copyright 2017, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
enum order
{
BUY,
SELL
};
input string info_1=" Multiplier Settings ";
input order FirstOrder=BUY;
input int Step=100;
input int TakeProfit=100;
input int StopLoss=100;
input bool UseMultiplier=false;
input double Multiplier=2;
input int TradesNumberForTakeProfit2=4;
input int TakeProfit2=150;
input string MM_Parameters=" Money Management ";
input double Lots=0.01;
input bool MoneyManagement=false;
input double Risk=1;
input int MagicNumber=2035;
double Pot;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if (Digits==5 ||Digits ==4)
{
Pot=0.0001;
}
else {
Pot=0.01;
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
}
//+------------------------------------------------------------------+
////////////////////////////////////////////////////////////////////////////////////////
/* الوظيفة الأولى :
MyRealOrdersTotal
تقوم بإعادة عدد الصفقات الحقيقية المفتوحة من قبل الاكسبيرت سواء كانت بيع أو شراء :
*/
////////////////////////////////////////////////////////////////////////////////////////
int MyRealOrdersTotal()
{
int c=0;
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
if (OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))contin ue;
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL))
{
c++;
}
}
return(c);
}
////////////////////////////////////////////////////////////////////////////////////////
/* الوظيفة الثانية
MyPendingOrdersTotal
تقوم بإعادة عدد الصفقات المعلقة من قبل الاكسبيرت سواء كانت بيع أو شراء بنوعيهما الستوب والليميت
*/
////////////////////////////////////////////////////////////////////////////////////////
int MyPendingOrdersTotal()
{
int c=0;
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))cont inue;
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol() && (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP))
{
c++;
}
}
return(c);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// جلب اللوت الاخير لاخر صفقه//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
double lastlot(double y)
{
for(int i=0;i<=OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))conti nue;
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
y = OrderLots();
}
}
return (y);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// معرفة اخر صفقه كسابه ام خسرانه //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool profit_loss(bool y)
{
y =true;
for(int i=0;i<OrdersHistoryTotal();i++)
{
if( OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderProfit()>0)
{
y=true;
}
else{
y=false;
}
}
}
return(y);
}
////////////////////////////////////////////////////////////////////////////////////////
/*الوظيفة الخامسة :
DeletePendingOrders
تقوم بحذف الصفقات المعلقة والتي لم تتفعل والمفتوحة من قبل الاكسبيرت .
*/
////////////////////////////////////////////////////////////////////////////////////////
int DeletePendingOrders()
{
int total = OrdersTotal();
for (int cnt = total - 1; cnt >= 0; cnt--)
{
if (OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))contin ue;
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol() && (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP))
{
if (OrderDelete(OrderTicket()))continue;
}
}
return(0);
}
kira-h
04-11-2017, 08:30 PM
السلام عليكم ورحمة الله وبركاتة
الف شكر اخى
مرفق الكود ممكن تقولى اضع الكود فين بالظبط
والف شكر اخى
وعليكم السلام
الكود غير كامل
عموما ستعدل الجزء التالي :
if(time==true&&nam_B=="OP_BUY"&&ordestotal1_2(OP_BUY)==0&&ordestotal1_2(OP_SELL)==0){//&&lastorder!=1){lastorder=1;
open(OP_BUY,Lots(MaxRisk),Ask,TakeProfit,StopLoss) ;
}
if(time==true&&nam_S=="OP_SELL"&&ordestotal1_2(OP_SELL)==0&&ordestotal1_2(OP_BUY)==0){//&&lastorder!=-1){lastorder=-1;
open(OP_SELL,Lots(MaxRisk),Bid,TakeProfit,StopLoss ) ;
}
بهذا الجزء :
int Try,ticket;
double TP,SL;
if(time==true&&nam_B=="OP_BUY"&&ordestotal1_2(OP_BUY)==0&&ordestotal1_2(OP_SELL)==0)
{//&&lastorder!=1){lastorder=1;
if(TakeProfit!=0)TP=Ask+TakeProfit*point;else TP=0;
if(StopLoss!=0)SL=Ask-StopLoss*point;else SL=0;
ticket=OrderSend(Symbol(),OP_BUY,Lots(MaxRisk),Nor malizeDouble(Ask,Digits),Slippage*Q,0,TP,"Kira-h",MagicNumber,0,Blue);
while(ticket<0&&Try<OpenOrderTry)
{
if(IsTradeAllowed())ticket=OrderSend(Symbol(),OP_B UY,Lots(MaxRisk),NormalizeDouble(Ask,Digits),Slipp age*Q,0,TP,"Kira-h",MagicNumber,0,Blue);
Sleep(1000);Try++;
}
}
if(time==true&&nam_S=="OP_SELL"&&ordestotal1_2(OP_SELL)==0&&ordestotal1_2(OP_BUY)==0)
{//&&lastorder!=-1){lastorder=-1;
if(TakeProfit!=0)TP=Bid-TakeProfit*point;else TP=0;
if(StopLoss!=0)SL=Bid+StopLoss*point;else SL=0;
ticket=OrderSend(Symbol(),OP_SELL,Lots(MaxRisk),No rmalizeDouble(Bid,Digits),Slippage*Q,0,TP,"Kira-h",MagicNumber,0,Red);
while(ticket<0&&Try<OpenOrderTry)
{
if(IsTradeAllowed())ticket=OrderSend(Symbol(),OP_S ELL,Lots(MaxRisk),NormalizeDouble(Bid,Digits),Slip page*Q,0,TP,"Kira-h",MagicNumber,0,Red);
Sleep(1000);Try++;
}
}
ثم تضع المتغيرات الخارجية التالية :
input int OpenOrderTry=5;
input int Slippage=5;
بحيث OpenOrderTry متغير خارجي تحدد فيه عدد محاولات فتح الصفقة، وهي محاول كل ثانية
و Slippage متغير خارجي تحدد فيه عدد النقاط المسموح به بإعادة التسعير أو الانزلاق السعري
غلباوى
05-11-2017, 10:41 PM
وعليكم السلام
الكود غير كامل
عموما ستعدل الجزء التالي :
if(time==true&&nam_B=="OP_BUY"&&ordestotal1_2(OP_BUY)==0&&ordestotal1_2(OP_SELL)==0){//&&lastorder!=1){lastorder=1;
open(OP_BUY,Lots(MaxRisk),Ask,TakeProfit,StopLoss) ;
}
if(time==true&&nam_S=="OP_SELL"&&ordestotal1_2(OP_SELL)==0&&ordestotal1_2(OP_BUY)==0){//&&lastorder!=-1){lastorder=-1;
open(OP_SELL,Lots(MaxRisk),Bid,TakeProfit,StopLoss ) ;
}
بهذا الجزء :
int Try,ticket;
double TP,SL;
if(time==true&&nam_B=="OP_BUY"&&ordestotal1_2(OP_BUY)==0&&ordestotal1_2(OP_SELL)==0)
{//&&lastorder!=1){lastorder=1;
if(TakeProfit!=0)TP=Ask+TakeProfit*point;else TP=0;
if(StopLoss!=0)SL=Ask-StopLoss*point;else SL=0;
ticket=OrderSend(Symbol(),OP_BUY,Lots(MaxRisk),Nor malizeDouble(Ask,Digits),Slippage*Q,0,TP,"Kira-h",MagicNumber,0,Blue);
while(ticket<0&&Try<OpenOrderTry)
{
if(IsTradeAllowed())ticket=OrderSend(Symbol(),OP_B UY,Lots(MaxRisk),NormalizeDouble(Ask,Digits),Slipp age*Q,0,TP,"Kira-h",MagicNumber,0,Blue);
Sleep(1000);Try++;
}
}
if(time==true&&nam_S=="OP_SELL"&&ordestotal1_2(OP_SELL)==0&&ordestotal1_2(OP_BUY)==0)
{//&&lastorder!=-1){lastorder=-1;
if(TakeProfit!=0)TP=Bid-TakeProfit*point;else TP=0;
if(StopLoss!=0)SL=Bid+StopLoss*point;else SL=0;
ticket=OrderSend(Symbol(),OP_SELL,Lots(MaxRisk),No rmalizeDouble(Bid,Digits),Slippage*Q,0,TP,"Kira-h",MagicNumber,0,Red);
while(ticket<0&&Try<OpenOrderTry)
{
if(IsTradeAllowed())ticket=OrderSend(Symbol(),OP_S ELL,Lots(MaxRisk),NormalizeDouble(Bid,Digits),Slip page*Q,0,TP,"Kira-h",MagicNumber,0,Red);
Sleep(1000);Try++;
}
}
ثم تضع المتغيرات الخارجية التالية :
input int OpenOrderTry=5;
input int Slippage=5;
بحيث OpenOrderTry متغير خارجي تحدد فيه عدد محاولات فتح الصفقة، وهي محاول كل ثانية
و Slippage متغير خارجي تحدد فيه عدد النقاط المسموح به بإعادة التسعير أو الانزلاق السعري
الف شكر اخى
NabileFX
06-11-2017, 03:08 PM
شكرا على التوضيح،
و تحية طيبة استاذ حسن
kira-h
06-11-2017, 04:23 PM
الف شكر اخى
بالتوفيق إن شاء الله
kira-h
06-11-2017, 04:24 PM
شكرا على التوضيح،
و تحية طيبة استاذ حسن
بالتوفيق إن شاء الله
kira-h
06-11-2017, 05:15 PM
السلام عليكم انا صممت او قدرت افهم الدوال الموجوده فى الاكسبيرت دا حتى الان لكنى لا استطيع فهم كيفية ربط هذه الدوال داخل الداله on tick كمثال
لعمل اكسبيرت يقوم عند وضعه على الشارت بفتح صفقه شراء او بيع ويتم ذلك من خلال الاختيارات فى enum
ثم يقوم بوضع صفقه معاكسه للمفتوحه اولا op_buystop او op_sellstop بعقد مضاعف وبعد تفعلها يضيف صفقه معاكسه وهكذا حتى يتم ضرب الهدف لاحدى الصفقات فيعود للعمل من البدايه انا لا اريد الاكسبيرت ولكن اريد الشرح فضلا وليس امرا
برجاء اخواننا الكرام شرح عمل ذلك ولكن بطريقه سهله وان امكن داخل الكود لاننى اريد فهم ذلك
مرفق الكود
//| my expert.mq4 |
//| Copyright 2017, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
enum order
{
BUY,
SELL
};
input string info_1=" Multiplier Settings ";
input order FirstOrder=BUY;
input int Step=100;
input int TakeProfit=100;
input int StopLoss=100;
input bool UseMultiplier=false;
input double Multiplier=2;
input int TradesNumberForTakeProfit2=4;
input int TakeProfit2=150;
input string MM_Parameters=" Money Management ";
input double Lots=0.01;
input bool MoneyManagement=false;
input double Risk=1;
input int MagicNumber=2035;
double Pot;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if (Digits==5 ||Digits ==4)
{
Pot=0.0001;
}
else {
Pot=0.01;
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
}
//+------------------------------------------------------------------+
////////////////////////////////////////////////////////////////////////////////////////
/* الوظيفة الأولى :
MyRealOrdersTotal
تقوم بإعادة عدد الصفقات الحقيقية المفتوحة من قبل الاكسبيرت سواء كانت بيع أو شراء :
*/
////////////////////////////////////////////////////////////////////////////////////////
int MyRealOrdersTotal()
{
int c=0;
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
if (OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))contin ue;
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL))
{
c++;
}
}
return(c);
}
////////////////////////////////////////////////////////////////////////////////////////
/* الوظيفة الثانية
MyPendingOrdersTotal
تقوم بإعادة عدد الصفقات المعلقة من قبل الاكسبيرت سواء كانت بيع أو شراء بنوعيهما الستوب والليميت
*/
////////////////////////////////////////////////////////////////////////////////////////
int MyPendingOrdersTotal()
{
int c=0;
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))cont inue;
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol() && (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP))
{
c++;
}
}
return(c);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// جلب اللوت الاخير لاخر صفقه//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
double lastlot(double y)
{
for(int i=0;i<=OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))conti nue;
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
y = OrderLots();
}
}
return (y);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// معرفة اخر صفقه كسابه ام خسرانه //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool profit_loss(bool y)
{
y =true;
for(int i=0;i<OrdersHistoryTotal();i++)
{
if( OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderProfit()>0)
{
y=true;
}
else{
y=false;
}
}
}
return(y);
}
////////////////////////////////////////////////////////////////////////////////////////
/*الوظيفة الخامسة :
DeletePendingOrders
تقوم بحذف الصفقات المعلقة والتي لم تتفعل والمفتوحة من قبل الاكسبيرت .
*/
////////////////////////////////////////////////////////////////////////////////////////
int DeletePendingOrders()
{
int total = OrdersTotal();
for (int cnt = total - 1; cnt >= 0; cnt--)
{
if (OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))contin ue;
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol() && (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP))
{
if (OrderDelete(OrderTicket()))continue;
}
}
return(0);
}
وعليكم السلام
راجع المشاركة التالية :
مثال تطبيقي لعمل اكسبيرت مضاعفات "سوبلكس" (http://www.fxprg.com/vb/showthread.php?t=31456&page=2&p=874924&viewfull=1#post874924)
Waddah
06-11-2017, 09:13 PM
السلام عليكم
هل يمكن تضمين كود شموع الرينكو في الإكسبرت بحيث اضع الإكسبرت على شارت الدقيقة ويأخذ بيانات شموع الرينكو بدون رسم الشموع (فقط قيم الإغلاق للتعامل معها ....)
غلباوى
07-11-2017, 09:43 AM
بالتوفيق إن شاء الله
السلام عليكم ورحمة الله وبركاتة
قمت بعمل التعديل هل يمكن التاكد من التعديل عن طريق الباك تست
وشكرا
kira-h
07-11-2017, 09:17 PM
السلام عليكم ورحمة الله وبركاتة
قمت بعمل التعديل هل يمكن التاكد من التعديل عن طريق الباك تست
وشكرا
وعليكم السلام
صعب التأكد عن طريق الباكتيست لأن الباكتيست لا تحدث به المشكلة بل دقيق وسريع بفتح الصفقات
لذلك الافضل التأكد لايف أو ديمو ستجد بالجورنال حدوث خطأ وبالرغم من ذلك فتح صفقة وهذا هو دور تلك الشروط
غلباوى
07-11-2017, 11:39 PM
وعليكم السلام
صعب التأكد عن طريق الباكتيست لأن الباكتيست لا تحدث به المشكلة بل دقيق وسريع بفتح الصفقات
لذلك الافضل التأكد لايف أو ديمو ستجد بالجورنال حدوث خطأ وبالرغم من ذلك فتح صفقة وهذا هو دور تلك الشروط
الف شكراخى
rambo
08-11-2017, 12:23 PM
السلام عليكم أستاذ حسن
مساء الخير
في حساب ecn استخدمت الدالة التالية لتعديل الهدف والوقف بعد افتتاح الصفقة
void OrdersModify()
{
bool s,m;
double SL,TP;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
int tk=OrderTicket(),
ty=OrderType(),
mn=OrderMagicNumber() ;
if(sy==Symbol()&&mn==MagicNo)
{
if(ty==OP_SELL)
{
if(Stoploss!=0)SL=op+Stoploss*point;else SL=0;
if(Takeprofit!=0)TP=op-Takeprofit*point;else TP=0;
if((sl!=SL)||(tp!=TP))
{
m=OrderModify(tk,op,SL,TP,0,Red);
}
}
if(ty==OP_BUY)
{
if(Stoploss!=0)SL=op-Stoploss*point;else SL=0;
if(Takeprofit!=0)TP=op+Takeprofit*point;else TP=0;
if((sl!=SL)||(tp!=TP))
{
m=OrderModify(tk,op,SL,TP,0,Blue);
}
}
}
}
}
ثم أقوم بإستدعائها داخل الدالة الرئيسية
OrdersModify();
طبعا عند عمل كومبايل للإكسبيرت لا توجد أي مشاكل أو تحذيرات
ولكن بمجرد تشغيله على الحساب لا يقوم بأي تعديل للهدف والوقف وتظهر هذه الأخطاء في خانة الجورنال كما في الصورة أدناه
أين المشكلة وما هو الحل بارك الله فيك
4036
kira-h
08-11-2017, 08:59 PM
الف شكراخى
بالتوفيق إن شاء الله
kira-h
08-11-2017, 09:03 PM
السلام عليكم أستاذ حسن
مساء الخير
في حساب ecn استخدمت الدالة التالية لتعديل الهدف والوقف بعد افتتاح الصفقة
....
طبعا عند عمل كومبايل للإكسبيرت لا توجد أي مشاكل أو تحذيرات
ولكن بمجرد تشغيله على الحساب لا يقوم بأي تعديل للهدف والوقف وتظهر هذه الأخطاء في خانة الجورنال كما في الصورة أدناه
أين المشكلة وما هو الحل بارك الله فيك
وعليكم السلام
تأكد من أن المنصة تقبل قيم الهدف والستوب، ويمكنك معرفة أقل قيمة مقبولة من خلال الصورة التالي :
4045
elhelaly
09-11-2017, 01:04 AM
استفسار برمجى ان امكن
السلام عليكم ورحمة الله وبركاته
برجاء الافاده عن الكود الخاص بأغلاق صفقه معينه
كمثال وضعت الاكسبيرت على الشارت قام بفتح صفقه شراء عند تحقق الشرط ثم قام بفتح صفقه شراء اخرى عند تحقق الشرط ( اريد منه الان ان يغلق الصفقه الاولى الشراء فقط )
ويترك الاخرى كما هى والعكس فى حالة البيع
ايضا فرضا انى اريد الاكسبرت يغلق الصفقه المفتوحه عند اغلاق الشمعه الحاليه ويقوم بفتح صفقه اخرى مع بداية الشمعه الجديده
كيف يمكن عمل ذلك بدون اغلاق جميع الصفقات المفتوحه
elhelaly
09-11-2017, 01:06 AM
او ان يترك الصفقه الاخيره فقط ويغلق الباقى مثلا
rambo
09-11-2017, 09:35 AM
وعليكم السلام
تأكد من أن المنصة تقبل قيم الهدف والستوب، ويمكنك معرفة أقل قيمة مقبولة من خلال الصورة التالي :
4045
شوف الصورة بالأسفل أستاذ حسن من منصتي واعطيني رأيك مع جزيل شكري لك
4052
kira-h
09-11-2017, 05:43 PM
شوف الصورة بالأسفل أستاذ حسن من منصتي واعطيني رأيك مع جزيل شكري لك
4052
استخدم الأمر المعلق، راجع الصورة بمشاركتي السابقة
وهل منصتك 4 أو 5 أرقام بعد الفاصلة باليورو دولار؟
rambo
10-11-2017, 08:04 AM
استخدم الأمر المعلق، راجع الصورة بمشاركتي السابقة
وهل منصتك 4 أو 5 أرقام بعد الفاصلة باليورو دولار؟
صباح النور أستاذ حسن
منصتي 5 أرقام بعد الفاصلة على اليورو دولار
أرفقت صورة جديدة للأمر المعلق وأعطيني رأيك الله يسهل جميع أمورك يا رب
4072
kira-h
11-11-2017, 04:33 AM
صباح النور أستاذ حسن
منصتي 5 أرقام بعد الفاصلة على اليورو دولار
أرفقت صورة جديدة للأمر المعلق وأعطيني رأيك الله يسهل جميع أمورك يا رب
4072
إذن هذا لا علاقة له بالخطأ
طيب ارفق الكود لمراجعته أو جزء منه كدالتي الشراء والبيع مع شروط الموديفاي
rambo
11-11-2017, 12:26 PM
إذن هذا لا علاقة له بالخطأ
طيب ارفق الكود لمراجعته أو جزء منه كدالتي الشراء والبيع مع شروط الموديفاي
السلام عليكم
مساء الخير
بعطيك فكرة سريعة عن الاكسبيرت
فكرته جدا بسيطة وهي الدخول يدويا لصفقة واحدة فقط، سواء عن طريق الأوامر المباشرة بمجرد تشغيله
أو عن طريق وضع الأوامر المعلقة عند سعر معين يوضع في متغير خارجي
وبعد افتتاح الصفقة المباشرة أو وصول السعر للصفقة المعلقة وتفعيلها يقوم الاكسبيرت بتعديل الهدف والوقف من صفر إلى الرقم المرغوب
طبعا لم أضع الهدف والستوب قبل افتتاح الصفقة لأن الحساب ECN وهذا غير مسموح.
دالة تعديل الهدف والوقف
void OrdersModify()
{
bool s,m;
double SL,TP;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
int tk=OrderTicket(),
ty=OrderType(),
mn=OrderMagicNumber() ;
if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==OP_SELL)
{
if(StopLoss!=0)SL=op+StopLoss*point;else SL=0;
if(TakeProfit!=0)TP=op-TakeProfit*point;else TP=0;
if((sl!=SL)||(tp!=TP))
{
m=OrderModify(tk,op,SL,TP,0,Red);
}
}
if(ty==OP_BUY)
{
if(StopLoss!=0)SL=op-StopLoss*point;else SL=0;
if(TakeProfit!=0)TP=op+TakeProfit*point;else TP=0;
if((sl!=SL)||(tp!=TP))
{
m=OrderModify(tk,op,SL,TP,0,Blue);
}
}
}
}
}
دالة الدخول ماركت ووضع الأوامر المعلقة
int open( int ty )
{
string x;
if(ty==OP_BUY)
{
clr=Blue;
x="buy";
pr=NormalizeDouble(Ask,Digits);
}
if(ty==OP_BUYLIMIT)
{
clr=Blue;
x="buy";
pr=NormalizeDouble(Price,Digits);
}
if(ty==OP_SELL)
{
x="sell";
clr=Red;
pr=NormalizeDouble(Bid,Digits);
}
if(ty==OP_SELLLIMIT)
{
x="sell";
clr=Red;
pr=NormalizeDouble(Price,Digits);
}
int tik=OrderSend(Symbol(),ty,Lot,pr,5*Q,0,0,x,MagicNu mber,0,clr);
return(tik);
}
ثم أستدعي هذه الدوال السابقة داخل الدالة الرئيسية بشكل عادي
مرفق أيضا الاكسبيرت كامل لو تحب تلقي نظرة
جزاك الله ألف خير أستاذي
kira-h
11-11-2017, 07:00 PM
السلام عليكم
مساء الخير
بعطيك فكرة سريعة عن الاكسبيرت
فكرته جدا بسيطة وهي الدخول يدويا لصفقة واحدة فقط، سواء عن طريق الأوامر المباشرة بمجرد تشغيله
أو عن طريق وضع الأوامر المعلقة عند سعر معين يوضع في متغير خارجي
وبعد افتتاح الصفقة المباشرة أو وصول السعر للصفقة المعلقة وتفعيلها يقوم الاكسبيرت بتعديل الهدف والوقف من صفر إلى الرقم المرغوب
طبعا لم أضع الهدف والستوب قبل افتتاح الصفقة لأن الحساب ECN وهذا غير مسموح.
دالة تعديل الهدف والوقف
void OrdersModify()
{
bool s,m;
double SL,TP;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
int tk=OrderTicket(),
ty=OrderType(),
mn=OrderMagicNumber() ;
if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==OP_SELL)
{
if(StopLoss!=0)SL=op+StopLoss*point;else SL=0;
if(TakeProfit!=0)TP=op-TakeProfit*point;else TP=0;
if((sl!=SL)||(tp!=TP))
{
m=OrderModify(tk,op,SL,TP,0,Red);
}
}
if(ty==OP_BUY)
{
if(StopLoss!=0)SL=op-StopLoss*point;else SL=0;
if(TakeProfit!=0)TP=op+TakeProfit*point;else TP=0;
if((sl!=SL)||(tp!=TP))
{
m=OrderModify(tk,op,SL,TP,0,Blue);
}
}
}
}
}
دالة الدخول ماركت ووضع الأوامر المعلقة
int open( int ty )
{
string x;
if(ty==OP_BUY)
{
clr=Blue;
x="buy";
pr=NormalizeDouble(Ask,Digits);
}
if(ty==OP_BUYLIMIT)
{
clr=Blue;
x="buy";
pr=NormalizeDouble(Price,Digits);
}
if(ty==OP_SELL)
{
x="sell";
clr=Red;
pr=NormalizeDouble(Bid,Digits);
}
if(ty==OP_SELLLIMIT)
{
x="sell";
clr=Red;
pr=NormalizeDouble(Price,Digits);
}
int tik=OrderSend(Symbol(),ty,Lot,pr,5*Q,0,0,x,MagicNu mber,0,clr);
return(tik);
}
ثم أستدعي هذه الدوال السابقة داخل الدالة الرئيسية بشكل عادي
مرفق أيضا الاكسبيرت كامل لو تحب تلقي نظرة
جزاك الله ألف خير أستاذي
وعليكم السلام
تم التصحيح بالنسخة المرفقة
rambo
12-11-2017, 04:51 AM
وعليكم السلام
تم التصحيح بالنسخة المرفقة
ألف شكرا لك أستاذ حسن على المساعدة
تحياتي وتقديري لك
kira-h
12-11-2017, 07:21 AM
استفسار برمجى ان امكن
السلام عليكم ورحمة الله وبركاته
برجاء الافاده عن الكود الخاص بأغلاق صفقه معينه
كمثال وضعت الاكسبيرت على الشارت قام بفتح صفقه شراء عند تحقق الشرط ثم قام بفتح صفقه شراء اخرى عند تحقق الشرط ( اريد منه الان ان يغلق الصفقه الاولى الشراء فقط )
ويترك الاخرى كما هى والعكس فى حالة البيع
ايضا فرضا انى اريد الاكسبرت يغلق الصفقه المفتوحه عند اغلاق الشمعه الحاليه ويقوم بفتح صفقه اخرى مع بداية الشمعه الجديده
كيف يمكن عمل ذلك بدون اغلاق جميع الصفقات المفتوحه
وعليكم السلام
يجب أن تضع شروط معينة لاغلاق الصفقة الأولى، أو تقوم بتمييزها عن طريق الماجك نمبر او الكومنت او حتى بمتغير
مثلا عند فتح اول صفقة تقوم بحفظ التيكت الخاص بها والافضل عن طريق دوال الجلوبال لضمان الحفظ
وبعد تحقق شرط الاغلاق تقوم باغلاق الصفقة ذات التيكت المحفوظ
void OnTick()
{
if(OrdersTotal()==0)GlobalVariableDel("Ticket");
if(Close[1]>Open[1]&&time!=Time[0]&&Volume[0]<5)//شرط الشراء مثلا
{
int ticket=OrderSend(Symbol(),OP_BUY,0.1,NormalizeDoub le(Ask,Digits),10,0,0,"",0,0,Blue);
if(ticket>0&&GlobalVariableGet("Ticket")==0)GlobalVariableSet("Ticket",ticket);//شرط الحفظ
time=Time[0];
}
if(Close[1]<Open[1])CloseBuyOrder();//وهنا مثلا شرط اغلاق الصفقة ذات التكت المحفوظ سلفا
}
void CloseBuyOrder()
{
for(int i=0;i<OrdersTotal();i++)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderTicket()==GlobalVariableGet("Ticket"))
{
if(OrderType()==OP_BUY)
{
bool close=OrderClose(GlobalVariableGet("Ticket"),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),1 0);
}
}
}
}
هذا فقط مثال توضيحي ويمكنك تعديل الشروط بما تريد كتحديد زوج الاغلاق والماجك نمبر وغيرها ...
kira-h
12-11-2017, 07:24 AM
او ان يترك الصفقه الاخيره فقط ويغلق الباقى مثلا
نفس المبدأ لابد من حفظ صبغة ما لتمييز الصفقة عن بقية الصفقات
Ahmed
12-11-2017, 12:52 PM
السلام عليكم استاذ حسن
اريد وظيفة تبحث في عدد معين من الشموع
تبحث عن اطول شمعة كانت كام نقطة (طول الشمعة من حيث الهاي واللو)
بارك الله فيك
صياد الجراح
12-11-2017, 01:03 PM
بسم الله الرحمن الرحيم
استاذ حسن تحية من القلب
ماهى طريقة كتابة الوان داخل كود استدعاء مؤشر (bw mfi (Market Facilitation Index
4119
مثلا
لو حابب اقول
عندما يكون البار ازرق وشمعة صاعدة حط سهم صاعد
وعندما يكون البار بنى وشمعة هابطة حط سهم هابط
طريقة استدعاء هذه الالوان ازاى .. ؟
لك ودى وتقديرى
Waddah
12-11-2017, 03:33 PM
بسم الله الرحمن الرحيم
استاذ حسن تحية من القلب
ماهى طريقة كتابة الوان داخل كود استدعاء مؤشر (bw mfi (Market Facilitation Index
4119
مثلا
لو حابب اقول
عندما يكون البار ازرق وشمعة صاعدة حط سهم صاعد
وعندما يكون البار بنى وشمعة هابطة حط سهم هابط
طريقة استدعاء هذه الالوان ازاى .. ؟
لك ودى وتقديرى
تفضل هذا نفس المؤشر لكن الخطوط بشكل إندكس واضح ( ملاحظة : معادلة المؤشر بسيطة جدا تستطيع تضمينه في الإكسبرت او المؤشر بدون إستدعائه من الميتا )
المعادلة هي
MFI = (HIGH - LOW) / VOLUME
Where:
HIGH — the highest price of the bar;
LOW — the lowest price of the bar;
VOLUME — volume of the current bar.
ثم مقارنة الفوليوم بالسابق
(المؤشر المرفق مفتوح الكود )
صياد الجراح
12-11-2017, 04:00 PM
تفضل هذا نفس المؤشر لكن الخطوط بشكل إندكس واضح ( ملاحظة : معادلة المؤشر بسيطة جدا تستطيع تضمينه في الإكسبرت او المؤشر بدون إستدعائه من الميتا )
المعادلة هي
MFI = (HIGH - LOW) / VOLUME
Where:
HIGH — the highest price of the bar;
LOW — the lowest price of the bar;
VOLUME — volume of the current bar.
ثم مقارنة الفوليوم بالسابق
(المؤشر المرفق مفتوح الكود )
الف شكر اخى وضاح
معلش انا لسا اعتبر مبتدء برمجة ..
كده المؤشر بشكل الاندكس الجديد اوضح وقدرت اتعامل معه .. واقوم باستدعاء الالوان بالشكل التقليدى
بارك الله فيك
تحياتى
Waddah
12-11-2017, 09:52 PM
السلام عليكم
أستاذ هل يوجد حل أو طريقة لمعالجة عدم تنفيذ الأمر بسبب Server is busy ..... واجهت مشكلة في إكسبرت حيث كان يجب أن يغلق كل الصفقات عندما يصل الربح لرقم معين ....أغلق أمر و الأمر الآخر لم يتم إغلاقه واختل التوازن ....كيف نتعامل مع هذه الحالة ؟؟
kira-h
13-11-2017, 02:54 AM
السلام عليكم
أستاذ هل يوجد حل أو طريقة لمعالجة عدم تنفيذ الأمر بسبب Server is busy ..... واجهت مشكلة في إكسبرت حيث كان يجب أن يغلق كل الصفقات عندما يصل الربح لرقم معين ....أغلق أمر و الأمر الآخر لم يتم إغلاقه واختل التوازن ....كيف نتعامل مع هذه الحالة ؟؟
وعليكم السلام
ستقوم بإضافة شرط إجباري للاغلاق يعني يحاول ويكرر تنفيذ الاغلاق إلى ان يصبح عدد الصفقات 0 ثم ينتهي دور المحاولات
مثال :
int Try=0;
void OnTick()
{
if(OrdersTotal()==0)Try=0;//إذا لا يوجد أي صفقة مفعلةيعود متغير المحاولات إلى قيمته الصفرية
if(AccountProfit()>50||Try>0){CloseOrders();Try++;} //إذا كان الربح الاجمالي أكبر من 50 دولار مثلا أو عدد المحاولات أكبر من صفر
//وجواب الشرط: تفعيل الاغلاق وزيادة محاولة برقم، أي 1 ثم المحاولة التالية 2 وهكذا
//وطبعا بعد تنفيذ اغلاق كل الصفقات تعود قيمة المحاولات إلى 0 كي لا يسبب إغلاق الصفقات الجديدة فيما بعد
}
وطبعا CloseOrders دالة اغلاق الصفقات
Waddah
13-11-2017, 09:16 PM
وعليكم السلام
ستقوم بإضافة شرط إجباري للاغلاق يعني يحاول ويكرر تنفيذ الاغلاق إلى ان يصبح عدد الصفقات 0 ثم ينتهي دور المحاولات
مثال :
int Try=0;
void OnTick()
{
if(OrdersTotal()==0)Try=0;//إذا لا يوجد أي صفقة مفعلةيعود متغير المحاولات إلى قيمته الصفرية
if(AccountProfit()>50||Try>0){CloseOrders();Try++;} //إذا كان الربح الاجمالي أكبر من 50 دولار مثلا أو عدد المحاولات أكبر من صفر
//وجواب الشرط: تفعيل الاغلاق وزيادة محاولة برقم، أي 1 ثم المحاولة التالية 2 وهكذا
//وطبعا بعد تنفيذ اغلاق كل الصفقات تعود قيمة المحاولات إلى 0 كي لا يسبب إغلاق الصفقات الجديدة فيما بعد
}
وطبعا CloseOrders دالة اغلاق الصفقات
انت معلم .........مشكور جدا
kira-h
14-11-2017, 11:16 AM
انت معلم .........مشكور جدا
العفو أخي الكريم
والله الموفق
خالد بن وليد
14-11-2017, 10:34 PM
السلام عليكم
كيف الحال أستاذ حسن أرجوا أن تكون في تمام الصحة والعافية
مبدائياً أعذرني سؤالي ليس برمجي لكن طار عقلي ولا اعرف حد أسئله أكثر خبره منك
أخي العزيز قبل كم أسبوع أشتريت اكسبرت من شخص أجنبي تواصلت معه عبر الفيس بوك
قبل هذا هو كان قد أرسل ألي معلومات عن الأكسبرت ومجموعة من الباك تست لأربع أزواج قال أن الأكسبرت لا يعمل ألا بها
الباك تست للأربع أزوج كانت مغريه فشتريت الأكسبرت بمبلغ مرتفع للغاية
أجريت باك تست بنسبة 99,9% للأربع أزواج وكانت النتائج مفاجئه حقيقه
تقربياً حصلت على نمو بنسبة 80% من الحساب كل شهر
وأكبر صفقة خاسره كانت 3 دولار
ومتوسط مجموعة الخسائر للزوج خلال 2 سنه كان لا يتعدى 700$
أنا وضعت الأكسبرت على حساب حقيقي فوراً وأودعت 1000$ (للعلم كان المبرمج قد أوصاني أن يكون الحساب أكبر من 200$)
لكن المفاجئه لم يمضي ألا أسبوع وحسابي شبه طاير تماماً لم يبقى سوى فتافيت
أنا أجريت باك تست للفترة التي عملت بها وكانت النتائج مغايره تماماً لما في الحساب الحقيقي !!
أنا محتار أخي هل المشكلة من الشركة
سؤالي
هل الشركة بمكانها الدخول الى الmt4 خاصتي والتلاعب بها أو بالأكسبرت وطريقت فتحه للصفقات
أتمنى الرد على أستفساري وجزاكم الله ألف خير
kira-h
15-11-2017, 01:19 AM
السلام عليكم
كيف الحال أستاذ حسن أرجوا أن تكون في تمام الصحة والعافية
مبدائياً أعذرني سؤالي ليس برمجي لكن طار عقلي ولا اعرف حد أسئله أكثر خبره منك
أخي العزيز قبل كم أسبوع أشتريت اكسبرت من شخص أجنبي تواصلت معه عبر الفيس بوك
قبل هذا هو كان قد أرسل ألي معلومات عن الأكسبرت ومجموعة من الباك تست لأربع أزواج قال أن الأكسبرت لا يعمل ألا بها
الباك تست للأربع أزوج كانت مغريه فشتريت الأكسبرت بمبلغ مرتفع للغاية
أجريت باك تست بنسبة 99,9% للأربع أزواج وكانت النتائج مفاجئه حقيقه
تقربياً حصلت على نمو بنسبة 80% من الحساب كل شهر
وأكبر صفقة خاسره كانت 3 دولار
ومتوسط مجموعة الخسائر للزوج خلال 2 سنه كان لا يتعدى 700$
أنا وضعت الأكسبرت على حساب حقيقي فوراً وأودعت 1000$ (للعلم كان المبرمج قد أوصاني أن يكون الحساب أكبر من 200$)
لكن المفاجئه لم يمضي ألا أسبوع وحسابي شبه طاير تماماً لم يبقى سوى فتافيت
أنا أجريت باك تست للفترة التي عملت بها وكانت النتائج مغايره تماماً لما في الحساب الحقيقي !!
أنا محتار أخي هل المشكلة من الشركة
سؤالي
هل الشركة بمكانها الدخول الى الmt4 خاصتي والتلاعب بها أو بالأكسبرت وطريقت فتحه للصفقات
أتمنى الرد على أستفساري وجزاكم الله ألف خير
وعليكم السلام
ومرحبا بك
طبعا الخطأ الذي ارتكبته هو اعتمادك على نتائج الباكتيست، وكان الأجدر التجربة بالديمو لفترة كافية حتى تستطيع ان تقرر
ومع ذلك نجاح الاكسبيرت بالدميو لا يعني نجاحه بنفس النتائج بالحقيقي
الحقيقي مختلف ومعرض للعديد من المتغيرات حسب العرض والطلب كسرعة التنفيذ وتغير السبريد، فليس كالديمو التجاري أو الاشهاري فقط
كذلك لا أعتقد ان الشركة تتجسس على كود الاكسبيرت مع أن هذا ممكن بحكم المنصة تابعة لها، والأكيد أنها تستطيع ايقاف أو رفض أو اغلاق اوامر معينة
هذا والله أعلم
Ahmed
16-11-2017, 04:07 PM
السلام عليكم استاذ حسن
كيف نجعل اختيار التايم فريم في المتغيرات الخارجية للاكسبيرت
kira-h
16-11-2017, 05:02 PM
السلام عليكم استاذ حسن
كيف نجعل اختيار التايم فريم في المتغيرات الخارجية للاكسبيرت
وعليكم السلام
مثال لعمل شرط شمعة صاعدة بدلالة الفريم
سيكون الشرط كالتالي :
void OnTick()
{
if(iClose(Symbol(),TimeFrame,1) > iOpen(Symbol(),TimeFrame,1)//...
}
بحيث TimeFrame متغير خارجي للفريم :
input ENUM_TIMEFRAMES TimeFrame=PERIOD_D1;
Ahmed
16-11-2017, 11:31 PM
شكرا لك اخي حسن
sal_moh85
17-11-2017, 12:01 AM
سلام عليكم اخ حسن شو سبب ظهور خطاء OrderSend error 3
هاد الكود يلي عدلة فيه
bool tkb= OrderSend(Symbol(),OP_BUYSTOP,lots,pricebuy,0,slb, tpbuy,"",Magicnumber,iTime( Symbol(), PERIOD_H1, 0 ) + 2900,Green);
عدلة اكسبير اغلاق صفقه المعلقه كنت كاتبها بي هذا كود
expire = TimeCurrent() + 60 * 48;
وشكرا جزيلا
kira-h
17-11-2017, 05:30 PM
شكرا لك اخي حسن
العفو أخي والله الموفق
kira-h
17-11-2017, 06:01 PM
سلام عليكم اخ حسن شو سبب ظهور خطاء OrderSend error 3
هاد الكود يلي عدلة فيه
bool tkb= OrderSend(Symbol(),OP_BUYSTOP,lots,pricebuy,0,slb, tpbuy,"",Magicnumber,iTime( Symbol(), PERIOD_H1, 0 ) + 2900,Green);
عدلة اكسبير اغلاق صفقه المعلقه كنت كاتبها بي هذا كود
expire = TimeCurrent() + 60 * 48;
وشكرا جزيلا
وعليكم السلام
الكود بالتعديل سليم حيث ستستخدم expire بناء على التوقيت الحالي TimeCurrent وليس توقيت شمعة سابقة Time
sal_moh85
17-11-2017, 06:45 PM
وعليكم السلام
الكود بالتعديل سليم حيث ستستخدم expire بناء على التوقيت الحالي TimeCurrent وليس توقيت شمعة سابقة Time
طب شو سبب ظهور OrderSend error 3
هاد الخطاء من شو بيظهر
Aminox
17-11-2017, 10:15 PM
السلام عليكم
مرحبا أخي حسن صادفت مشكل لم أجد له حلا
عندما أقوم بوضع الباك تيست ويصل الفوليم إلى 50
لا يقم الإكسبيرت بدخول صفقات أخرى ما الحل في هذه الحالة
شكرا لك بالتوفيق
kira-h
18-11-2017, 02:50 AM
طب شو سبب ظهور OrderSend error 3
هاد الخطاء من شو بيظهر
معناه خطأ ببرامتر الصفقة Invalid trade parameters. وهو واضح من توقيت الاكسبير
kira-h
18-11-2017, 02:51 AM
السلام عليكم
مرحبا أخي حسن صادفت مشكل لم أجد له حلا
عندما أقوم بوضع الباك تيست ويصل الفوليم إلى 50
لا يقم الإكسبيرت بدخول صفقات أخرى ما الحل في هذه الحالة
شكرا لك بالتوفيق
وعليكم السلام
راجع خانة الجورنال لمعرفة السبب وغالبا سيكون نقص بالحساب غير كافي
Aminox
18-11-2017, 02:31 PM
وعليكم السلام
راجع خانة الجورنال لمعرفة السبب وغالبا سيكون نقص بالحساب غير كافي
تفضل أخي حسن هذا هو الجورنال
عندما أقوم بوضع لوت 49 يعمل عادي و عندما
أقوم بوضع لوت 51 لا يعمل ... هل هناك رافعة
مالية أيضا على الباك تيست أم يوجد مشكل تقني
عجيب هذا الأمر أخي حسن
4214
m_nasseem
18-11-2017, 03:26 PM
تحياتي للاخوة الكرام بالمنتدي والمتابعين
ارجو المساعدة كيفية استخراج القيم الحاليىة و السابقة لققم و قيعان مؤشر زقزاق وشرح البارامترات المستحدمة الاسطر البرمجية
وشرح كيفية استخدام دالة closeby
ولكم مني جزيل الشكر
محمد
Aminox
18-11-2017, 04:45 PM
ما رأيك أخي حسن في هذا المشكل و هل له حلا أو لا
كل شئء في الصورة و الإكسبيرت في المرفقات تحياتي أخي
4217
kira-h
18-11-2017, 11:45 PM
تفضل أخي حسن هذا هو الجورنال
عندما أقوم بوضع لوت 49 يعمل عادي و عندما
أقوم بوضع لوت 51 لا يعمل ... هل هناك رافعة
مالية أيضا على الباك تيست أم يوجد مشكل تقني
عجيب هذا الأمر أخي حسن
4214
نعم أخي يوجد رافعة تلقائية بالباكاتيست تابعة للحساب المفتوح ديمو او حقيقي
كذلك يوجد حد أقصى لحجم العقد يختلف من شركة لأخرى
kira-h
19-11-2017, 12:03 AM
تحياتي للاخوة الكرام بالمنتدي والمتابعين
ارجو المساعدة كيفية استخراج القيم الحاليىة و السابقة لققم و قيعان مؤشر زقزاق وشرح البارامترات المستحدمة الاسطر البرمجية
وشرح كيفية استخدام دالة closeby
ولكم مني جزيل الشكر
محمد
السلام عليكم
تحديد قيمة القاع حسب الرقم كالتالي :
double ZigZagBottom(int num)
{
int Num;
for(int i=0;i<Bars;i++)
{
double zig=iCustom(Symbol(),0,"ZigZag",12,5,3,0,i);
if(zig==Low[i])
{
Num++;
if(Num==num)return(zig);
}
}
return(zig);
}
تحديد قيمة القمة حسب الرقم
double ZigZagTop(int num)
{
int Num;
for(int i=0;i<Bars;i++)
{
double zig=iCustom(Symbol(),0,"ZigZag",12,5,3,0,i);
if(zig==High[i])
{
Num++;
if(ZZ_Num==num)return(zig);
}
}
return(zig);
}
دالة الاغلاق بواسطة CloseBy كالتالي : (وطبعا تكون الشركة تدعم هذا النوع من الاغلاق مع وجود على الاقل صفقة شراء وصفقة بيع مفعلة)
void CloseBy()
{
int t1=0,t2=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==OP_BUY&&t1==0)
{
t1=OrderTicket();
}
if(OrderType()==OP_SELL&&t2==0)
{
t2=OrderTicket();
}
}
}
if(t1>0&&t2>0)
{
bool r=OrderCloseBy(t1,t2);
}
}
}
kira-h
19-11-2017, 12:15 AM
ما رأيك أخي حسن في هذا المشكل و هل له حلا أو لا
كل شئء في الصورة و الإكسبيرت في المرفقات تحياتي أخي
قد يكون السبب تأخير بالتنفيذ أو ارتفاع السبريد او إعادة تسعير أو حتى قفزة سعرية التي لا تظهر بشموع الرينكو
عموما تم التعديل بالنسخة المرفقة باجبار الاكسبيرت على فتح الصفقة عند سعر الاغلاق أو بسعر أفضل
m_nasseem
19-11-2017, 12:23 AM
السلام عليكم
تحديد قيمة القاع حسب الرقم كالتالي :
double ZigZagBottom(int num)
{
int Num;
for(int i=0;i<Bars;i++)
{
double zig=iCustom(Symbol(),0,"ZigZag",12,5,3,0,i);
if(zig==Low[i])
{
Num++;
if(Num==num)return(zig);
}
}
return(zig);
}
تحديد قيمة القمة حسب الرقم
double ZigZagTop(int num)
{
int Num;
for(int i=0;i<Bars;i++)
{
double zig=iCustom(Symbol(),0,"ZigZag",12,5,3,0,i);
if(zig==High[i])
{
Num++;
if(ZZ_Num==num)return(zig);
}
}
return(zig);
}
دالة الاغلاق بواسطة CloseBy كالتالي : (وطبعا تكون الشركة تدعم هذا النوع من الاغلاق مع وجود على الاقل صفقة شراء وصفقة بيع مفعلة)
void CloseBy()
{
int t1=0,t2=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==OP_BUY&&t1==0)
{
t1=OrderTicket();
}
if(OrderType()==OP_SELL&&t2==0)
{
t2=OrderTicket();
}
}
}
if(t1>0&&t2>0)
{
bool r=OrderCloseBy(t1,t2);
}
}
}
بارك الله قيك اخ حسن عفوا معادلة الزقزاق تستخرج اخر قمة و ,اخر قاع ام ممكن نتحكم في رقم القمة او القاع عن ظريق المدخل num
وترتيب القمم والقيعان القمة الحالية رقمها زيرو و السابقة رقمها 1 وهكذا القاع
او نحصل علي القمم والفيعان السابقة بتغير احد البارميتر في الدالة وما هو؟
kira-h
19-11-2017, 12:46 AM
بارك الله قيك اخ حسن عفوا معادلة الزقزاق تستخرج اخر قمة و ,اخر قاع ام ممكن نتحكم في رقم القمة او القاع عن ظريق المدخل num
وترتيب القمم والقيعان القمة الحالية رقمها زيرو و السابقة رقمها 1 وهكذا القاع
او نحصل علي القمم والفيعان السابقة بتغير احد البارميتر في الدالة وما هو؟
نعم التحكم برقم القمة أو القاع عن طريق المدخل num
m_nasseem
19-11-2017, 01:13 AM
نعم التحكم برقم القمة أو القاع عن طريق المدخل num
مشكور اخي بالنسبة للدالة closeby
t1 يغلق t2
ام كل منهما يغلق الاخر انا كل ما اريده عند تفعيل امر ما شراء او بيع وليكن رقم التكيت يرمز له t1 يقوم باغلاق امر معلق t2
Aminox
19-11-2017, 03:12 AM
جزاك الله خيرا أخي حسن تشتغل معنا بصدق و بجدية
جزاك الله خيرا مرة أخرى لولاك لما إستطعنا معرفة العديد من الأشياء
kira-h
19-11-2017, 07:43 PM
مشكور اخي بالنسبة للدالة closeby
t1 يغلق t2
ام كل منهما يغلق الاخر انا كل ما اريده عند تفعيل امر ما شراء او بيع وليكن رقم التكيت يرمز له t1 يقوم باغلاق امر معلق t2
نعم كل منهما يغلق الاخر
kira-h
19-11-2017, 07:45 PM
جزاك الله خيرا أخي حسن تشتغل معنا بصدق و بجدية
جزاك الله خيرا مرة أخرى لولاك لما إستطعنا معرفة العديد من الأشياء
آمين، وإياك أخي الكريم
والله الموفق
mr.forex
20-11-2017, 01:56 AM
السلام عليكم ورحمة الله وبركاته
أستاذي القدير حسن، لدي عدة مؤشرات بصيغة ex4 والمشكلة أنني لا أملك نسخة مفتوحة الكود للأسف وأريد تشغيلها على فوركس تستر
حاولت ولكن لم تضبط معي
هل صحيح بأن فوركس تستر لا يشغل مؤشرات إلا بصيغة dll
واذا كان الجواب نعم ماهي طريقة تحويل صيغة ex4 إلى صيغة dll
جزاك الله كل خير ورزقك من واسع فضله ...
kira-h
20-11-2017, 02:13 AM
السلام عليكم ورحمة الله وبركاته
أستاذي القدير حسن، لدي عدة مؤشرات بصيغة ex4 والمشكلة أنني لا أملك نسخة مفتوحة الكود للأسف وأريد تشغيلها على فوركس تستر
حاولت ولكن لم تضبط معي
هل صحيح بأن فوركس تستر لا يشغل مؤشرات إلا بصيغة dll
واذا كان الجواب نعم ماهي طريقة تحويل صيغة ex4 إلى صيغة dll
جزاك الله كل خير ورزقك من واسع فضله ...
وعليكم السلام
معذرة أخي ليس لدي علم بالفوركس تيستر، فلا أستخدم سوى الميتاتريدر 4
ربما أحد الأخوة من له خبرة بهذا البرنامج يفيدك
mr.forex
20-11-2017, 02:36 AM
وعليكم السلام
معذرة أخي ليس لدي علم بالفوركس تيستر، فلا أستخدم سوى الميتاتريدر 4
ربما أحد الأخوة من له خبرة بهذا البرنامج يفيدك
شكرا لك أستاذ حسن على تجاوبك
طيب بغض النظر عن الفوركس تستر
1- برمجيا هل بالإمكان تحويل أي مؤشر من من صيغة ex4 إلى dll ؟
2- برمجيا هل بالإمكان إنشاء مؤشر جديد بصيغة dll ؟
مع خالص شكري لك أستاذي القدير
kira-h
20-11-2017, 04:09 AM
شكرا لك أستاذ حسن على تجاوبك
طيب بغض النظر عن الفوركس تستر
1- برمجيا هل بالإمكان تحويل أي مؤشر من من صيغة ex4 إلى dll ؟
2- برمجيا هل بالإمكان إنشاء مؤشر جديد بصيغة dll ؟
مع خالص شكري لك أستاذي القدير
1- غير ممكن لان نسخة ex4 مغلقة الكود
2- نعم ممكن
mr.forex
20-11-2017, 04:55 PM
1- غير ممكن لان نسخة ex4 مغلقة الكود
2- نعم ممكن
شكرا لك أستاذ حسن
وضحت الأمور الله يعطيك العافية
بالنسبة لتحويل مؤشر من صيغة mq4 إلى صيغة dll ماهي الخطوات لعمل ذلك ؟
تحياتي وتقديري لك
kira-h
20-11-2017, 08:46 PM
شكرا لك أستاذ حسن
وضحت الأمور الله يعطيك العافية
بالنسبة لتحويل مؤشر من صيغة mq4 إلى صيغة dll ماهي الخطوات لعمل ذلك ؟
تحياتي وتقديري لك
العفو أخي
يمكن التحويل بأكثر من لغة برمجة كـ ++c ويجب أن يكون لديك خبرة فيها
mr.forex
21-11-2017, 02:56 AM
العفو أخي
يمكن التحويل بأكثر من لغة برمجة كـ ++c ويجب أن يكون لديك خبرة فيها
شكرا على الايضاح أستاذ حسن
الله ييسر لك جميع أمورك يا رب
kira-h
21-11-2017, 07:05 PM
شكرا على الايضاح أستاذ حسن
الله ييسر لك جميع أمورك يا رب
آمين، وإياك أخي
Aminox
21-11-2017, 07:50 PM
السلام عليكم أخي حسن
قمت بعمل إكسبيرت...عند إفتتاح شمعة
خارج البولينجر يقوم بدخول صفقة
إذا كان الخروج للأعلى يقوم بدخول sell
و إذا كان الخروج للأسفل يدخل Buy
لكني أريده أن يخرج من الصفقة عند ملامسة
خط الموفينج 14 كيف أقوم بذالك
الإكسبيرت في المرفقات تحياتي أخي
kira-h
22-11-2017, 12:24 AM
السلام عليكم أخي حسن
قمت بعمل إكسبيرت...عند إفتتاح شمعة
خارج البولينجر يقوم بدخول صفقة
إذا كان الخروج للأعلى يقوم بدخول sell
و إذا كان الخروج للأسفل يدخل Buy
لكني أريده أن يخرج من الصفقة عند ملامسة
خط الموفينج 14 كيف أقوم بذالك
الإكسبيرت في المرفقات تحياتي أخي
وعليكم السلام
مرفق الاكسبيرت
Aminox
22-11-2017, 04:49 AM
السلام عليكم أخي حسن
لقد حاولت وضع كود للخروج من الصفقة
عندما يكون الrsi يساوي 50 لكن لا يعمل
هل من مساعدة من فضلك أخي الإكسبيرت في المرفقات
هل كود الخروج من الصفقة الذي وضعته في الإكسبيرت صحيح ؟
Waddah
22-11-2017, 11:22 AM
السلام عليكم
أستاذ مرفق مؤشر أسهم لقمم وقيعان ال ZIgZAg مفتوح الكود - حاولت أن أجعله يضع سهم جديد دون محي السابق لم تنجح الطريقة ... هل يمكن ذلك بدون استخدام مؤشر آخر (يعني التعديل على كود المؤشر نفسه ) ...
مع جزيل الشكر
kira-h
22-11-2017, 07:47 PM
السلام عليكم أخي حسن
لقد حاولت وضع كود للخروج من الصفقة
عندما يكون الrsi يساوي 50 لكن لا يعمل
هل من مساعدة من فضلك أخي الإكسبيرت في المرفقات
هل كود الخروج من الصفقة الذي وضعته في الإكسبيرت صحيح ؟
وعليكم السلام
مرفق الاكسبيرت
kira-h
22-11-2017, 07:53 PM
السلام عليكم
أستاذ مرفق مؤشر أسهم لقمم وقيعان ال ZIgZAg مفتوح الكود - حاولت أن أجعله يضع سهم جديد دون محي السابق لم تنجح الطريقة ... هل يمكن ذلك بدون استخدام مؤشر آخر (يعني التعديل على كود المؤشر نفسه ) ...
مع جزيل الشكر
وعليكم السلام
جرب المؤشر المرفق
Aminox
23-11-2017, 02:58 AM
مرحبا أخي حسن شكرا للمتابعة
إنه لا يعمل حاوت برمجته مرة أخرى
لكن دون جدوى تفضل الصورة توضح ما المطلوب
الإكسبيرت فــــــــي المرفقــــــــــــــــــات تحياتي أخي
شكرا لك كثيرا أعتذر عن الإزعاج
4297
kira-h
23-11-2017, 08:03 PM
مرحبا أخي حسن شكرا للمتابعة
إنه لا يعمل حاوت برمجته مرة أخرى
لكن دون جدوى تفضل الصورة توضح ما المطلوب
الإكسبيرت فــــــــي المرفقــــــــــــــــــات تحياتي أخي
شكرا لك كثيرا أعتذر عن الإزعاج
هذا فقط لأن الشروط صعب تتحق بالضبط عند الرقم 50
جرب النسخة المرفقة
Ahmed
23-11-2017, 11:39 PM
السلام عليكم استاذ حسن
اريد كومنت تظهر على الشارت
الفرق بالساعات بين توقيت جرنتش وتوقيت المنصه
بارك الله فيك
kira-h
24-11-2017, 01:07 AM
السلام عليكم استاذ حسن
اريد كومنت تظهر على الشارت
الفرق بالساعات بين توقيت جرنتش وتوقيت المنصه
بارك الله فيك
وعليكم السلام
الفرق بين توقيت المنصة وتوقيت جرينيتش كالتالي :
double DiffTime=MathAbs(StrToTime(TimeGMT()) - TimeCurrent())/3600;
ويوجد كذلك وظيفة تحسب الفرق بين توقيت الحاسوب وتوقيت جرينتش
TimeGMTOffset()
Ahmed
24-11-2017, 07:01 AM
الف شكر لك اخي حسن
kira-h
24-11-2017, 04:23 PM
الف شكر لك اخي حسن
بالتوفيق ان شاء الله
sabil
25-11-2017, 10:57 PM
ارجو التعديل على المؤشر المرفق ليعمل بالشرط التالي
اذا كانت الشمعة رقم 2 هابطة والشمعة رقم 1 صاعدة
واغلقت اعلى من هاي 2
يعني ابتلاع شرائي يرسم الفيبو من اللو الى الهاي لتلك الشمعة الابتلاعية
ويرسمه مرة اخرى لو كانت شمعة ابتلاعية هابطة
من الهاي الى للو
الاهم ان يتم رسمه مرتين
kira-h
26-11-2017, 02:24 AM
ارجو التعديل على المؤشر المرفق ليعمل بالشرط التالي
اذا كانت الشمعة رقم 2 هابطة والشمعة رقم 1 صاعدة
واغلقت اعلى من هاي 2
يعني ابتلاع شرائي يرسم الفيبو من اللو الى الهاي لتلك الشمعة الابتلاعية
ويرسمه مرة اخرى لو كانت شمعة ابتلاعية هابطة
من الهاي الى للو
الاهم ان يتم رسمه مرتين
أخي الكريم هذا الموضوع مخصص فقط للأسئلة البرمجية
افتح موضوع طلب واشرح الفكرة بتفاصيلها مع صور توضيحية
والله الموفق
sabil
26-11-2017, 03:28 PM
أخي الكريم هذا الموضوع مخصص فقط للأسئلة البرمجية
افتح موضوع طلب واشرح الفكرة بتفاصيلها مع صور توضيحية
والله الموفق
حاضر
طيب ياريت ترد على الكومنت الخاص بي في موضوع "اهم الدوال البرمجية"
kira-h
26-11-2017, 06:25 PM
حاضر
طيب ياريت ترد على الكومنت الخاص بي في موضوع "اهم الدوال البرمجية"
تم الرد أخي
sal_moh85
26-11-2017, 07:11 PM
تم الرد أخي
سلام عليكم اخ حسن بس سوال شو سبب ارتفاع درو داون وطريقة تخفيض الدرو داون
وشو طريقه يلي بتنحسب فيها الدرو داون
وفي طريقه برمجيه اني سيطر على درو داون
يعني اعرف حط خيار في اكسبيرت بس لما يصل درو داون فرضا 20 لا عاد تفتح ولا صفقه
وشكرا
kira-h
26-11-2017, 08:51 PM
وعليكم السلام
لا يمكن التحكم بالدروداون إلا عن طريق الهيدج أو اغلاق الصفقات،
sal_moh85
26-11-2017, 11:14 PM
وعليكم السلام
لا يمكن التحكم بالدروداون إلا عن طريق الهيدج أو اغلاق الصفقات،
مشكور اخ حسن
kira-h
27-11-2017, 08:02 PM
العفو أخي والله الموفق
samizhraldeen
28-11-2017, 06:25 AM
السلام عليكم اخي كيرا اعلم انه لدي موضوع مفتوح ولكني كنت متفرغ للبرمجة وتعليمها
عندي سؤال وفقك الله لماذا كل ما ابرمج اكسبيرت يفتح صفقات كثيرة بدون توقف حاولت اغير كلمة (0) retutn
ال 1 ولكنها لم تنفع هل هنالك حل لهذه المشكلة الصغيرة
sabil
28-11-2017, 02:25 PM
عايز دالة ادارة راس مال التناسبية بالشروط الاتية
نقسم الرصيد على 100 والناتج هنقسمه على عدد النقاط الناتجة من طرح اللو من الهاي للشمعة السابقة والناتج يكون اللوت المستخدم في الصفقة
مثال :
لو الرصيد 5000 دولار هنقسم الرصيد ده على 100 الناتج هيكون 50 دولار
هنفترض المسافة بين الهاي واللو للشمعة السابقة 25 نقطة
اذن هنقسم 50 دولار على 25 نقطة والناتج هيكون 2
اذن حجم اللوت نهائي للصفقة هيكون 2 دولار
وصلت ؟
kira-h
28-11-2017, 07:22 PM
عايز دالة ادارة راس مال التناسبية بالشروط الاتية
نقسم الرصيد على 100 والناتج هنقسمه على عدد النقاط الناتجة من طرح اللو من الهاي للشمعة السابقة والناتج يكون اللوت المستخدم في الصفقة
مثال :
لو الرصيد 5000 دولار هنقسم الرصيد ده على 100 الناتج هيكون 50 دولار
هنفترض المسافة بين الهاي واللو للشمعة السابقة 25 نقطة
اذن هنقسم 50 دولار على 25 نقطة والناتج هيكون 2
اذن حجم اللوت نهائي للصفقة هيكون 2 دولار
وصلت ؟
ماذا تقصد بحجم اللوت 2 دولار !
kira-h
28-11-2017, 07:23 PM
السلام عليكم اخي كيرا اعلم انه لدي موضوع مفتوح ولكني كنت متفرغ للبرمجة وتعليمها
عندي سؤال وفقك الله لماذا كل ما ابرمج اكسبيرت يفتح صفقات كثيرة بدون توقف حاولت اغير كلمة (0) retutn
ال 1 ولكنها لم تنفع هل هنالك حل لهذه المشكلة الصغيرة
وعليكم السلام
ارفق الاكسبيرت للتصحيح
وغالبا لم تستخدم شرط عدد الصفقات
مثال لشرط عدم وجود أي صفقة قبل دالة فتح الصفقة :
if(OrdersTotal()==0)
sabil
28-11-2017, 07:48 PM
ماذا تقصد بحجم اللوت 2 دولار !
يعني اللوت هيبقى متغير ومتوقف على حسب استوب الصفقة بناءاً على المعادلة فوق
والاستوب هنا هيكون سعر هاي الشمعة السابقة في حالة البيع
او اللو في حالة الشراء
2 دولار كان مجرد مثال
kira-h
28-11-2017, 07:57 PM
يعني اللوت هيبقى متغير ومتوقف على حسب استوب الصفقة بناءاً على المعادلة فوق
والاستوب هنا هيكون سعر هاي الشمعة السابقة في حالة البيع
او اللو في حالة الشراء
2 دولار كان مجرد مثال
اعط مثال تطبيقي بالارقام فتكون النتيجة عبارة حجم عن عقد الصفقة
sabil
29-11-2017, 12:11 AM
اعط مثال تطبيقي بالارقام فتكون النتيجة عبارة حجم عن عقد الصفقة
بص ياسيدي
هنحدد حجم اللوت بناءاً على معادلتين
عندنا معادلة ثابتة ومعادلة متغيرة
المعادلة الثابتة هي اننا هنقسم راس المال وده هنعمله متغير خارجي على رقم معين وليكن 100 وده بردو هعمله متغير خارجي للتحكم وتغيير الرقم
هنقسم الناتج الحاصل من هذه المعادلة الثابتة على الناتج في المعادلة المتغيرة
المعادلة المتغيرة هي اختلاف عدد نقاط الاستوب في كل صفقة
يعني عدد نقاط الاستوب = فرق النقاط بين سعر الدخول وسعر الاستوب لوز
اذن النتيجة النهائية لحجم عقد الصفقة = راس المال ولنفترض 5000 دولار هنقسمه على رقم عشوائي وليكن 100 اذن الناتج 50
ثم ...
ثم نقسم 50 على فرق النقاط بين سعر دخول الصفقة والاستوب لوز
ولنفترض ان فرق النقاط 25
اذن حجم اللوت او العقد النهائي للصفقة = 50 / 25 نقطة = 2 دولار حجم عقد الصفقة
kira-h
29-11-2017, 01:16 AM
بص ياسيدي
هنحدد حجم اللوت بناءاً على معادلتين
عندنا معادلة ثابتة ومعادلة متغيرة
المعادلة الثابتة هي اننا هنقسم راس المال وده هنعمله متغير خارجي على رقم معين وليكن 100 وده بردو هعمله متغير خارجي للتحكم وتغيير الرقم
هنقسم الناتج الحاصل من هذه المعادلة الثابتة على الناتج في المعادلة المتغيرة
المعادلة المتغيرة هي اختلاف عدد نقاط الاستوب في كل صفقة
يعني عدد نقاط الاستوب = فرق النقاط بين سعر الدخول وسعر الاستوب لوز
اذن النتيجة النهائية لحجم عقد الصفقة = راس المال ولنفترض 5000 دولار هنقسمه على رقم عشوائي وليكن 100 اذن الناتج 50
ثم ...
ثم نقسم 50 على فرق النقاط بين سعر دخول الصفقة والاستوب لوز
ولنفترض ان فرق النقاط 25
اذن حجم اللوت او العقد النهائي للصفقة = 50 / 25 نقطة = 2 دولار حجم عقد الصفقة
نفس الاشكال
لا يوجد حجم العقد 2 دولار !
حدد لي حجم العقد الذي ستفتح به الصفقة ومعادلته
مثلا 0.01 أو 0.2 ...
sabil
29-11-2017, 04:13 AM
نفس الاشكال
لا يوجد حجم العقد 2 دولار !
حدد لي حجم العقد الذي ستفتح به الصفقة ومعادلته
مثلا 0.01 أو 0.2 ...
هههههه
بص الـ 50 دولار دي الناتجة من قسمة 5000 دولار على الرقم 100
دا مبلغ الخسارة في الصفقة الواحدة
يعني كل صفقة هندخلها هنحددلها خسارة 50 دولار فقط يعني لو دخلنا 100 صفقة خاسرة ورا بعض الحساب يمرجن
والرقم 100 ده هو عدد الصفقات الخسرانة
طيب انا عايز ادخل صفقة استوبها 25 نقطة وانا محدد الخسارة بتاعتي عموما 50 دولار لكل صفقة
يبقى علشان اخسر 50 دولار في الصفقة دي هحتاج اضرب 25 نقطة في كام ؟
طبعاً 2 دولار
-50 دولار = 2 دولار × 25 نقطة
في النهاية حجم العقد في الصفقة هيكون شكله ايه ؟
هيكون كده 0.2
يعني 2 دولار
وطبعاً اللوت هيتغير حسب الاستوب
يارب تكون وصلت
خالد بن وليد
29-11-2017, 09:41 AM
السلام عليكم اخي حسن
في عندي أستفسار بسيط
أريد أن اعرف هل من الممكن لأي مبرمج عمل مثل هذا الأكسبرت
ببساطة
أكسبرت أقوم بتحديد أكسبرت أخر من خلال قائمة منسدله في داخله
وبعدها أقوم بتحميل أعدادات محفوظة بصيغة set في مجلد Presets
وأحدد عدد من الأزواج
ويقوم الأكسبرت بفتح الأزواج ويضع في الزوج الأكسبرت المحدد و يطبيق الأعدادات المحملة في الأزواج مع تغير الماجنك نمبر لكل زوج
هل بالأمكان عمله ؟؟ وأذا كان جوابك لا فما هي اللغة التي تعتقد أن بأمكاني عمل هذا الأكسبرت بها
أنا أحتاج هذا الأكسبرت لأن تطبيق الأعدادات في vps أمر مرهق جداً مع سوء الأتصال المستمر وخصوصاً عند تطبيق أكثر من 10 أزواج بنفس الاكسبرت
sal_moh85
29-11-2017, 12:08 PM
سلام عليكم اخ حسن
هل يوجد كود لا دارة راس المال حسب وقف الخساره وشكرا
kira-h
29-11-2017, 08:58 PM
السلام عليكم اخي حسن
في عندي أستفسار بسيط
أريد أن اعرف هل من الممكن لأي مبرمج عمل مثل هذا الأكسبرت
ببساطة
أكسبرت أقوم بتحديد أكسبرت أخر من خلال قائمة منسدله في داخله
وبعدها أقوم بتحميل أعدادات محفوظة بصيغة set في مجلد Presets
وأحدد عدد من الأزواج
ويقوم الأكسبرت بفتح الأزواج ويضع في الزوج الأكسبرت المحدد و يطبيق الأعدادات المحملة في الأزواج مع تغير الماجنك نمبر لكل زوج
هل بالأمكان عمله ؟؟ وأذا كان جوابك لا فما هي اللغة التي تعتقد أن بأمكاني عمل هذا الأكسبرت بها
أنا أحتاج هذا الأكسبرت لأن تطبيق الأعدادات في vps أمر مرهق جداً مع سوء الأتصال المستمر وخصوصاً عند تطبيق أكثر من 10 أزواج بنفس الاكسبرت
وعليكم السلام
اعتقد ممكن
ولكن بدل ذلك يمكنك استخدام البروفايل يعني تقوم بحفظ كل الاعدادات والشارتات من خلال حفظ بروفايل
فبمجرد الضغط على البروفايل المحدد يتم ضبط كل شيء في ثواني
4377
forex007
30-11-2017, 06:15 AM
السلام عليكم
كيف من الممكن ظهور الاوبجكت Horizontal Line نجعله فقط على فريم الدقيقة من خلال الوصف ؟
مثل مانعرف هذا الخط الافقي له وصف مثال لو كتبت انا بالوصف مقاومة يومي وظهرت مقاومة ثانية وضعت له وصف مقاومة يومي كل مايظهر لدي مقاومة وبضع خط اكتب علية مقاومة يومي .. الخ او حسب ماكتب بالوصف
افكر اعمل سكربت يكون فيه متغير من نوع bool بياخذ قيمة true , false ومتغير اخر بضع فيه اسم الوصف لهذا الكائن مثل كتبت فية مقاومة يومي
اذا كانت قيمة المتغير الاول false يروح سكربت يبحث عن كل اوبجت اسمة مقاومة يومي ويحول عرضه الى الدقيقه فقط يعني باقي الفريمات لايظهر عليها
صورة مرفقة توضيح الفكرة
واذا سحبت سكربت مرة ثانية وكانت القيمة true يروح يبحث عن كل اوبجكت فية الوصف مقاومة يومي ويقوم بعرضه على جميع الفريمات
شكرا لكم
kira-h
01-12-2017, 08:56 PM
السلام عليكم
كيف من الممكن ظهور الاوبجكت Horizontal Line نجعله فقط على فريم الدقيقة من خلال الوصف ؟
مثل مانعرف هذا الخط الافقي له وصف مثال لو كتبت انا بالوصف مقاومة يومي وظهرت مقاومة ثانية وضعت له وصف مقاومة يومي كل مايظهر لدي مقاومة وبضع خط اكتب علية مقاومة يومي .. الخ او حسب ماكتب بالوصف
افكر اعمل سكربت يكون فيه متغير من نوع bool بياخذ قيمة true , false ومتغير اخر بضع فيه اسم الوصف لهذا الكائن مثل كتبت فية مقاومة يومي
اذا كانت قيمة المتغير الاول false يروح سكربت يبحث عن كل اوبجت اسمة مقاومة يومي ويحول عرضه الى الدقيقه فقط يعني باقي الفريمات لايظهر عليها
صورة مرفقة توضيح الفكرة
واذا سحبت سكربت مرة ثانية وكانت القيمة true يروح يبحث عن كل اوبجكت فية الوصف مقاومة يومي ويقوم بعرضه على جميع الفريمات
شكرا لكم
وعليكم السلام
يمكنك جعل كل خط يظهر فقط بالفريم الخاص به بناء على معادلاته بنفس الفريم وشرط الفريم قبل دالة رسم الخط
مثال :
if(Period()==1440)//...
وطبعا إذا كان الفريم مخالف لفريم الخط يتم حذفه
if(Period()!=1440)ObjectDelete("...");
أما إذا تريد العكس مثلا بظهور خط لفريم اليومي بفريم الساعة ستضع قبل دالة الرسم شرط فريم الساعة، وجعل معادلات سعر الخط الأفقي أو سعري الترند مبنية على فريم اليومي
ويوجد اسعار الفتح والاغلاق والهاي واللو والمؤشرات بدلالة الفريم
مثال :
iClose(Symbol(),PERIOD_D1,1)
iOpen(Symbol(),PERIOD_D1,1)
iHigh(Symbol(),PERIOD_D1,1)
iLow(Symbol(),PERIOD_D1,1)
elhelaly
02-12-2017, 08:53 AM
السلام عليكم اخوانى
لو تكرمتم اريد الكود الخاص بتحديد اغلاق شمعه معينه مثلا اول شمعه ساعه او اربعه ساعات فى اول الشهر على ان يكون الرقم ثابت لحين افتتاح شمعه شهر جديده
انا اعلم ibarshift هى لجلب القيمه ولكننى لا اعرف كيف استخدمها وايضا لا اعرف كيف يتم جلب الهاى واللو والكلوز للشمعه المحدده من خلالها
رجاء ارفاق الكود مع شرح الكود بطريقه مبسطه..... وشاكرا لكم مجهوداتكم
elhelaly
03-12-2017, 01:38 AM
السلام عليكم اخوانى
لو تكرمتم اريد الكود الخاص بتحديد اغلاق شمعه معينه مثلا اول شمعه ساعه او اربعه ساعات فى اول الشهر على ان يكون الرقم ثابت لحين افتتاح شمعه شهر جديده
انا اعلم ibarshift هى لجلب القيمه ولكننى لا اعرف كيف استخدمها وايضا لا اعرف كيف يتم جلب الهاى واللو والكلوز للشمعه المحدده من خلالها
رجاء ارفاق الكود مع شرح الكود بطريقه مبسطه..... وشاكرا لكم مجهوداتكم
اخونا حسن لو تكرمت شرح تلك النقطه لى لو سمحت اريد تحديد اغلاق او الهاى او اللو لشمعه محدده مثلا اول ساعه او تانى ساعه او اول 4 ساعات فى الاسبوع او فى الشهر
مع توضيح لو عاوزها الشهر الحالى او الماضى وسأكون شاكرا لك اخى
kira-h
03-12-2017, 02:20 AM
السلام عليكم اخوانى
لو تكرمتم اريد الكود الخاص بتحديد اغلاق شمعه معينه مثلا اول شمعه ساعه او اربعه ساعات فى اول الشهر على ان يكون الرقم ثابت لحين افتتاح شمعه شهر جديده
انا اعلم ibarshift هى لجلب القيمه ولكننى لا اعرف كيف استخدمها وايضا لا اعرف كيف يتم جلب الهاى واللو والكلوز للشمعه المحدده من خلالها
رجاء ارفاق الكود مع شرح الكود بطريقه مبسطه..... وشاكرا لكم مجهوداتكم
وعليكم السلام
مثال لطريقة معرفة رقم أول شمعة ساعة في الشهر المنصرم : (وقس على ذلك بما تريد)
int FirstBar=iBarShift(Symbol(),PERIOD_H1,iTime(Symbol (),PERIOD_MN1,0),false);
double close=iClose(Symbol(),PERIOD_H1,FirstBar),
open=iOpen(Symbol(),PERIOD_H1,FirstBar),
high=iHigh(Symbol(),PERIOD_H1,FirstBar),
low=iLow(Symbol(),PERIOD_H1,FirstBar);
elhelaly
03-12-2017, 08:52 AM
وعليكم السلام
مثال لطريقة معرفة رقم أول شمعة ساعة في الشهر المنصرم : (وقس على ذلك بما تريد)
int FirstBar=iBarShift(Symbol(),PERIOD_H1,iTime(Symbol (),PERIOD_MN1,0),false);
double close=iClose(Symbol(),PERIOD_H1,FirstBar),
open=iOpen(Symbol(),PERIOD_H1,FirstBar),
high=iHigh(Symbol(),PERIOD_H1,FirstBar),
low=iLow(Symbol(),PERIOD_H1,FirstBar);
تسلم ايديك يا غالى
elhelaly
03-12-2017, 10:11 AM
لو سمحت اخى حسن سؤال لو تكرمت
لو أنا مثلا عاوز افتح صفقه كمثال اذا كان إغلاق الشمعه الحاليّه اعلى من سعر معين
بحدود نقاط معينه
يعنى مثلا النقطه إللى عاوز أبيع واشترى منها مثلا عند سعر 100 عاوز أقوله لو شمعه ساعه اغلقت فوق السعر المحدد إللى هو 100 فحدود من 105 الى 120 افتح شراء والعكس بيع ولو زاد الاغلاق عن الحد دا يبقى الشرط لم يتحقق وميفتحش صفقات دا بقى يتحقق ازاى أو أيه هو الكود لو سمحت
kira-h
03-12-2017, 09:41 PM
تسلم ايديك يا غالى
العفو أخي الكريم
kira-h
03-12-2017, 09:43 PM
لو سمحت اخى حسن سؤال لو تكرمت
لو أنا مثلا عاوز افتح صفقه كمثال اذا كان إغلاق الشمعه الحاليّه اعلى من سعر معين
بحدود نقاط معينه
يعنى مثلا النقطه إللى عاوز أبيع واشترى منها مثلا عند سعر 100 عاوز أقوله لو شمعه ساعه اغلقت فوق السعر المحدد إللى هو 100 فحدود من 105 الى 120 افتح شراء والعكس بيع ولو زاد الاغلاق عن الحد دا يبقى الشرط لم يتحقق وميفتحش صفقات دا بقى يتحقق ازاى أو أيه هو الكود لو سمحت
الشرط كالتالي :
if(iClose(Symbol(),PERIOD_H1,1)>105&&iClose(Symbol(),PERIOD_H1,1)<120)//.. Buy
ويمكنك الان عمل شرط البيع
samizhraldeen
04-12-2017, 01:20 AM
السلام عليكم اخي كيرا
اريد من بعد اذن حضرتك ان يتم برمجة اكسبيرت بناءا على هذا الكود لفتح صفقات بيع وشراء
وان يعمل على كل العملات
اعتذر منك بسبب عدم كتابته في الصيغة php
لعدم مقدرتي على ذلك
Int Start ()
{
if(iColse(0,60,5)>iClose(0,60,3)&&iOpen(0,60,4)>iOpen(0,60,2)&&OrdersTotal()==0);
OrderSend(Symbol (),OP_BUY,0.01,Ask,30,Ask-0.0010,Ask+0.0050,"",123456789,0,Green );
}
elhelaly
04-12-2017, 04:45 PM
بارك الله فيك اخى حسن وزادك الله من علمه
لدى استفسار اخر بارك الله فيك
لو تكرمت عاوز الكود الخاص باغلاق الصفقه المفتوحه عند إغلاق شمعه معينه قد تكون شمعه الساعة أو الأربع ساعات أو الْيَوْمَ أو الاسبوع ..الخ
أيضا احتاج الكود الخاص بفتح صفقه واحده كل شمعه يعنى خلال الشمعه الواحدة يفتح صفقه واحده فقط وقد تكون شمعة ساعه أو يوم. ..الخ.
elhelaly
05-12-2017, 01:20 PM
بارك الله فيك اخى حسن وزادك الله من علمه
لدى استفسار اخر بارك الله فيك
لو تكرمت عاوز الكود الخاص باغلاق الصفقه المفتوحه عند إغلاق شمعه معينه قد تكون شمعه الساعة أو الأربع ساعات أو الْيَوْمَ أو الاسبوع ..الخ
أيضا احتاج الكود الخاص بفتح صفقه واحده كل شمعه يعنى خلال الشمعه الواحدة يفتح صفقه واحده فقط وقد تكون شمعة ساعه أو يوم. ..الخ.
أنا عرفت الجواب اخى تسلم ما تتعب حالك
elhelaly
05-12-2017, 01:22 PM
استفسار اخر معلش
هل يمكن تحديد عدد الصفقات التى يتم فتحها بشكل يومى من قبل الاكسبيرت
يعنى لو أنا عاوز الاكسبيرت يفتح 3 صفقات أو 4 صفقات فقط خلال الْيَوْمَ
ولاحظ اخى خلال الْيَوْمَ وليس فى نفس الوقت يعنى الاولى ضربت ستوب أو هدف ثم التانيه ستوب أو هدف ..الخ
فان وصل الى الصفقه الرابعه. فتحها وتوقف عمله لليوم الجديد أو الشمعه الجديده
وآسف لكثرة اسالتى فمازلت فى البدايات فتحملنى
elhelaly
05-12-2017, 01:34 PM
السلام عليكم اخي كيرا
اريد من بعد اذن حضرتك ان يتم برمجة اكسبيرت بناءا على هذا الكود لفتح صفقات بيع وشراء
وان يعمل على كل العملات
اعتذر منك بسبب عدم كتابته في الصيغة php
لعدم مقدرتي على ذلك
Int Start ()
{
if(iColse(0,60,5)>iClose(0,60,3)&&iOpen(0,60,4)>iOpen(0,60,2)&&OrdersTotal()==0);
OrderSend(Symbol (),OP_BUY,0.01,Ask,30,Ask-0.0010,Ask+0.0050,"",123456789,0,Green );
}
هعملك الاكسبيرت اخى مساء أنا الان فى العمل
الاكسبيرت بسيط جدا ولن يأخذ وقت هخلص دوام وهرفقه ليك باذن الله
هشرحلك إللى فهمته من الكود وقولى لو فى غلط
الشرط هو لو كان إغلاق الشمعه رقم 5 على فريم الساعه اكبر من إغلاق الشمعه 3 على فريم الساعه
وافتتاح الشمعه رقم 4 اكبر من افتتاح الشمعه رقم 2. ولا توجد أو صفقات مفتوحة
ادخل شراء
هل يوجد شرط محدد للبيع ولا العكس تماما يدخل بيع
Waddah
05-12-2017, 02:14 PM
السلام عليكم
كيف نحدد آخر تقاطع للستوكاستيك هابط أم صاعد (قد يكون في الشمعة السابقة وقد يكون من 15 شمعة )
samizhraldeen
05-12-2017, 04:07 PM
شكرا ليك اخي وضاح انا حاولت ابرمجه لانه بسيط ولكني لم انجح بسبب
بيفتح صفقات بدون الاتلتزام بالاستراتيجية ويفتح صفقات كثيرة بدون التحكم بعدد الصفقات
ياريت تضيفله الترلينغ ستوب والبرريك ايفن وترفقه مفتوح حتى اتعلم اقرا الكود
بالنسبة لسؤالك بالعكس البيع
kira-h
05-12-2017, 07:27 PM
أنا عرفت الجواب اخى تسلم ما تتعب حالك
بالتوفيق إن شاء الله
kira-h
05-12-2017, 07:31 PM
السلام عليكم
كيف نحدد آخر تقاطع للستوكاستيك هابط أم صاعد (قد يكون في الشمعة السابقة وقد يكون من 15 شمعة )
وعليكم السلام
يمكنك ذلك بعمل دالة تستخرج آخر اشارة للشرط
مثال :
int LastSignal()
{
for(int i=1;i<=Bars;i++)
{
double m=iStochastic(Symbol(),0,5,3,3,0,0,MODE_MAIN,i),
s=iStochastic(Symbol(),0,5,3,3,0,0,MODE_SIGNAL,i);
if(m>s)return(1);
if(m<s)return(-1);
}
return(0);
}
فيكون شرط آخر اشارة تقاطع الخط الأخضر أعلى من الأحمر كالتالي :
if(LastSignal()==1)
والعكس
if(LastSignal()==-1)
elhelaly
05-12-2017, 07:32 PM
السلام عليكم اخي كيرا
اريد من بعد اذن حضرتك ان يتم برمجة اكسبيرت بناءا على هذا الكود لفتح صفقات بيع وشراء
وان يعمل على كل العملات
اعتذر منك بسبب عدم كتابته في الصيغة php
لعدم مقدرتي على ذلك
Int Start ()
{
if(iColse(0,60,5)>iClose(0,60,3)&&iOpen(0,60,4)>iOpen(0,60,2)&&OrdersTotal()==0);
OrderSend(Symbol (),OP_BUY,0.01,Ask,30,Ask-0.0010,Ask+0.0050,"",123456789,0,Green );
}
اتفضل اخى طلبك جاهز قم بالتجربه ولو فى اى ملاحظات اخبرنى
انا اضفتلك مضاعفات لو اردت استخدامها اجعل قيمه Multiplier بقيمه المضاعفة التى تريد لو لم ترد استخدام مضاعفات اجعل القيمه 1 كمل هى
بالنسبه للبريك ايفن
الاولى BreakEven دى لعدد النقاط اللى بعدها هيعمل بريك ايفن يعنى لو السعر اتحرك كام نقطه يحط الايقاف على نقطه الدخول
اما BreakEvenPips دى لو عاوز تحجز ربح كمان فوق البريك ايفن او ممكن تخليها بالسالب كمان لو عاوز اقل من نقطه الدخول بعدد نقاط معينه
واعتقد انها تغنى عن التريلنج جرب اخى واخبرنى
واتمنى من الاستاذ حسن يشوف الاكسبيرت ويقولى لو فيه اخطاء
كمان فيه 3 warning يا ريت لو استاذ حسن يقولى حلهم ايه
الاكسبيرت فى المرفقات اخى واتمنى لك التوفيق
elhelaly
05-12-2017, 08:23 PM
اتفضل اخى طلبك جاهز قم بالتجربه ولو فى اى ملاحظات اخبرنى
انا اضفتلك مضاعفات لو اردت استخدامها اجعل قيمه Multiplier بقيمه المضاعفة التى تريد لو لم ترد استخدام مضاعفات اجعل القيمه 1 كمل هى
بالنسبه للبريك ايفن
الاولى BreakEven دى لعدد النقاط اللى بعدها هيعمل بريك ايفن يعنى لو السعر اتحرك كام نقطه يحط الايقاف على نقطه الدخول
اما BreakEvenPips دى لو عاوز تحجز ربح كمان فوق البريك ايفن او ممكن تخليها بالسالب كمان لو عاوز اقل من نقطه الدخول بعدد نقاط معينه
واعتقد انها تغنى عن التريلنج جرب اخى واخبرنى
واتمنى من الاستاذ حسن يشوف الاكسبيرت ويقولى لو فيه اخطاء
كمان فيه 3 warning يا ريت لو استاذ حسن يقولى حلهم ايه
الاكسبيرت فى المرفقات اخى واتمنى لك التوفيق
والله منا مزعلك دى نسخه كمان فيها تريلنج وبريك ايفن تقدر تفعل البريك او الترينلج من خلال true &false
طبقا اغلبها اكواد الاستاذ حسن وانا لسه تلميذ وربنا يوفقنا جميعا
ويا ريت لو فى تعديل او ملاحظه استاذ حسن تبلغنى بيها
samizhraldeen
05-12-2017, 11:05 PM
اخي حسن ممكن توضع ايدك فب الموضوع
الاكسبيرت فيه خطأ
لا يفتح صفقات حسب الاستراتيجية
وليس هنالك كود البيع
اعتذر منك اخ elhelaly اخطات بينك وبين اسم الاخ وضاح
الاكسبيرت فيه مشكلة انه بيفتح صفقات بدون اتباع الفكرة
يعني بيفتح صفقة واذا ضربت ستوب بيضافها واذا تيك بيرجع بيفتع وحدة ثانية
ولكن هو بهالطريقة ماشي على مولتي بلاير
لا غير
شكرا الك اذا قدرت تعدل فيه تمام واذا لا خلينا نشوف الاستاذ حسن شو تعديله
مع اضافة كود البيع
وفقكم الله
elhelaly
06-12-2017, 12:35 AM
اخي حسن ممكن توضع ايدك فب الموضوع
الاكسبيرت فيه خطأ
لا يفتح صفقات حسب الاستراتيجية
وليس هنالك كود البيع
اعتذر منك اخ elhelaly اخطات بينك وبين اسم الاخ وضاح
الاكسبيرت فيه مشكلة انه بيفتح صفقات بدون اتباع الفكرة
يعني بيفتح صفقة واذا ضربت ستوب بيضافها واذا تيك بيرجع بيفتع وحدة ثانية
ولكن هو بهالطريقة ماشي على مولتي بلاير
لا غير
شكرا الك اذا قدرت تعدل فيه تمام واذا لا خلينا نشوف الاستاذ حسن شو تعديله
مع اضافة كود البيع
وفقكم الله
اكتبلى اخى شروط البيع والشراء كتابه دون اكواد شرط البيع على حدا وشرط الشراء على حدا
اما بالنسبه للمضاعفات اخبرتك انك ممكن تلغيها بوضع 1 فى خانه المضاعفات
اطلعنى على الشروط كامله ربما استطيع مساعدتك
samizhraldeen
06-12-2017, 01:29 AM
شكرا اخي لاضافتك خلينا ففقط بالترلينغ ستوب والبريك ايفن
الشروط هي اغلاق الشمعة اغلاق الشمعة 5 اكبر من اغلاق الشمعة 3 و افتتاح الشمعة 4 اكبر من افتتاح الشمعة 2 لا اكثر
elhelaly
06-12-2017, 02:15 AM
شكرا اخي لاضافتك خلينا ففقط بالترلينغ ستوب والبريك ايفن
الشروط هي اغلاق الشمعة اغلاق الشمعة 5 اكبر من اغلاق الشمعة 3 و افتتاح الشمعة 4 اكبر من افتتاح الشمعة 2 لا اكثر
مرفق شرط البيع والشراء للاطلاع اخى هل هو كما تريد لو صحيح حمل من المرفقات (انا وضعت شرط البيع عكس الشراء مباشره لانك لم تطلعنى على تفصيل شرط البيع)
ايضا لالغاء المضاعفات خلى الرقم 1 فى خانه multi
استخدم الاستوب والتيك بروفيت اللى انت جربت عليهم الاستراتيجيه
كمان من خانه ارو او فولس true &false اختار اللى انت عاوز تفعله سواء بريك ايفن او تريلنج او الاتنين
كمان خلى بالك قيم الشموع بتتغير مع اغلاق كل شمعه (اما لو تقصد الشمعه رقم 5 فى اليوم او الشمعه رقم 3 فى اليوم دى تظل قيمتها ثابته ) برجاء ايضاح الشرط لو لم يكن كما ارفقته لك اخى وبالتوفيق ان شاء الله
if(OrdersTotal()<1)
{
if(iClose(NULL,PERIOD_H1,5)>iClose(NULL,PERIOD_H1,3)&&iOpen(NULL,PERIOD_H1,4)>iOpen(NULL,PERIOD_H1,2))
{
BuyOrder();
}
if(iClose(NULL,PERIOD_H1,5)<iClose(NULL,PERIOD_H1,3)&&iOpen(NULL,PERIOD_H1,4)<iOpen(NULL,PERIOD_H1,2)) {SellOrder();}
}
}
elhelaly
06-12-2017, 03:04 AM
اما لو تقصد الشمعه رقم 5 فى اليوم او الشمعه رقم 3 فى اليوم وهكذا
تفضل حمل من المرفقات
shivaa
06-12-2017, 04:23 PM
السلام عليكم
ممكن مساعد فى داله تحسب عدد الصفقات المفعله فى يوم ثم كتبتها فى ملف اكسل يكون اقسام الملف
تاريخ اليوم
العدد الصفقات
كام صفقه كسبانه
كام صفقه خاسره
كام صفقه شراء
كام صفقه بيع
اكون شاكر
elhelaly
07-12-2017, 09:06 PM
استاذ حسن لو تكرمت
فرضا انى ابحث عن علاقه معينه بين الشموع مثلا اذا اتت شمعه على فريم الساعه الفوليوم الخاص بها مثلا يساوى 50 تسبقها شمعه الوليوم الخاص بها يساوى 20 مثلا
وعاوز اخبر الاكسبيرت ان يرسم خط على هاى الشمعه ذات الفوليوم الكبير مثلا عند اغلاقها
كيف اوظف اللغه لذلك فى حين ان الشمعه تتغير رتبتها يعنى هى الان الشمعه صفر ثم بعد الاغلاق تصبح الشمعه 1 ثم بعد اغلاق اخرى تصبح 2 وهكذا
اعتقد انه الوقت هو الشىء الثابت هنا ولكنى لا احسن جلب تلك المعادله
هل ممكن المساعده فى ذلك ان امكن
المطلوب هو كيفيه جلب هاى او لو شمعه عباره عن حاله تحدث على الشارت //كما قلت فى المثال الحاله هى عباره عن شمعه الفوليوم الخاص بها 50 تسبقها شمعه الفوليوم الخاص بها 20 كيف اجلب بيانات تلك الشمعه
sal_moh85
17-12-2017, 11:15 AM
سلام عليكم استاذ حسن
ارجو المساعده في داله ترينغ ستوب لوز
عاوز الداله كل اتي
انا على فرض حاطة ترينغ ستوب لوز 15 نقطه عاوز الترينغ ستوب ما يتفعل في نفس الشمعه يلي انفتح فيها الصفقه يتفعل بي شمعه القادمه ويتم متفعل
انا حاولة في وضع شرط كل شمعه جديده بس واجهتني مشكله بتحريك ترينغ كل شمعه يعني ما بيتم متفعل على طول
وشكرا جزيلا
shivaa
17-12-2017, 07:36 PM
السلام عليكم
ممكن مساعد فى داله تحسب عدد الصفقات المفعله فى يوم ثم كتبتها فى ملف اكسل يكون اقسام الملف
تاريخ اليوم
العدد الصفقات
كام صفقه كسبانه
كام صفقه خاسره
كام صفقه شراء
كام صفقه بيع
اكون شاكر
الرجاء الرد
kira-h
18-12-2017, 02:13 AM
سلام عليكم استاذ حسن
ارجو المساعده في داله ترينغ ستوب لوز
عاوز الداله كل اتي
انا على فرض حاطة ترينغ ستوب لوز 15 نقطه عاوز الترينغ ستوب ما يتفعل في نفس الشمعه يلي انفتح فيها الصفقه يتفعل بي شمعه القادمه ويتم متفعل
انا حاولة في وضع شرط كل شمعه جديده بس واجهتني مشكله بتحريك ترينغ كل شمعه يعني ما بيتم متفعل على طول
وشكرا جزيلا
وعليكم السلام
ارفق أو أكتب كود المحاولة لتصحيحه
sal_moh85
18-12-2017, 08:58 AM
وعليكم السلام
ارفق أو أكتب كود المحاولة لتصحيحه
مشكور اخ حسن على المساعده
bool NewBar()
{
static int i=0;
if(Bars==i)return(false);
i=Bars;
return(true);
}
هاد الكود الشمعه الجديده
وهاد الكود تبع ترينغ
void MoveATRTS()
{
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
double ATT=iATR(NULL,TF,ATR,1)/point;
double ATR1=(HiddenTS/ATT)*100*point;
int cnt,total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
if(NewBar())//شرط تحريك ترينغ عند شمعه الجديده
if(NormalizeDouble(Ask-(TrailingStep*point),Digits)>NormalizeDouble((op+(ATR1)),Digits))
{
if((NormalizeDouble(sl,Digits)<NormalizeDouble(Bid-(ATR1),Digits))||(sl==0))
{
bool mod=OrderModify(tk,op,NormalizeDouble(Bid-(ATR1),Digits),tp,0,Blue);
}
}
}
else
{
if(NewBar())//شرط تحريك ترينغ عند شمعه الجديده
if(NormalizeDouble(Bid+(TrailingStep*point),Digits )<NormalizeDouble((op-(ATR1)),Digits))
{
if((NormalizeDouble(sl,Digits)>(NormalizeDouble(Ask+(ATR1),Digits)))||(sl==0))
{
mod=OrderModify(tk,op,NormalizeDouble(Ask+(ATR1),D igits),tp,0,Red);
}
}
}
}
}
}
هي الكود تبع ترينغ ستوب المشكله يلي واجهتها انا حاطة الترينغ ستوب 15 نقطه فتحت صفقه وتحرك السعر 50 نقطه لهون تمام لا يوجد مشكله ما تحرك الترينغ ستوب لانوحاطة شرط ما يتفعل الترينغ في نفس الشمعه افتتاح الصفقه
فتحت شمعه جديده تحرك الترينغ ستوب وقف لانو في شرط عند فتاح الشمع الجديده يتحرك الترينغ ستوب يعني لح يتحرك مره تانيه عند شمعه التاليه هنا مشكله
انا بدي ياه بس الشمغه الاولى ما يتحرك وباقي الشموع عادي يتحرك او مثال اعطي انا وقت معين يعني بعد 45 دقيقه من فتح الصفقه يتحرك الترينغ
كمان حاولت فيها اني حطة شرط اذا كان وقت افتتاح الصفقه اكبر من 45 دقيقه يتفعل كمان ما زبطت استعنة بي دالة بحث عن تفاصيل اخير صفقه مفعله
هون مشكله يلي واجهتاه صار يطلع وقت فتح صفقه رقم طويلي كتير كمان ما زبطت
وشكرا لك جزيلا
Ahmed
18-12-2017, 03:26 PM
السلام عليكم استاذ حسن
برمجيا كيف يمكن فتح profiles معين في توقيت واغلاق profiles في توقيت
بمعني انا عندي اكثر من شارت مفتوح اريد من الاكسبيرت اغلاق كل الشارتات المفتوحة في توقيت معين
ثم فتح كل الشارتات مرة اخري في توقيت معين
بارك الله فيك
kira-h
18-12-2017, 06:51 PM
مشكور اخ حسن على المساعده
bool NewBar()
{
static int i=0;
if(Bars==i)return(false);
i=Bars;
return(true);
}
هاد الكود الشمعه الجديده
وهاد الكود تبع ترينغ
void MoveATRTS()
{
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
double ATT=iATR(NULL,TF,ATR,1)/point;
double ATR1=(HiddenTS/ATT)*100*point;
int cnt,total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
if(NewBar())//شرط تحريك ترينغ عند شمعه الجديده
if(NormalizeDouble(Ask-(TrailingStep*point),Digits)>NormalizeDouble((op+(ATR1)),Digits))
{
if((NormalizeDouble(sl,Digits)<NormalizeDouble(Bid-(ATR1),Digits))||(sl==0))
{
bool mod=OrderModify(tk,op,NormalizeDouble(Bid-(ATR1),Digits),tp,0,Blue);
}
}
}
else
{
if(NewBar())//شرط تحريك ترينغ عند شمعه الجديده
if(NormalizeDouble(Bid+(TrailingStep*point),Digits )<NormalizeDouble((op-(ATR1)),Digits))
{
if((NormalizeDouble(sl,Digits)>(NormalizeDouble(Ask+(ATR1),Digits)))||(sl==0))
{
mod=OrderModify(tk,op,NormalizeDouble(Ask+(ATR1),D igits),tp,0,Red);
}
}
}
}
}
}
هي الكود تبع ترينغ ستوب المشكله يلي واجهتها انا حاطة الترينغ ستوب 15 نقطه فتحت صفقه وتحرك السعر 50 نقطه لهون تمام لا يوجد مشكله ما تحرك الترينغ ستوب لانوحاطة شرط ما يتفعل الترينغ في نفس الشمعه افتتاح الصفقه
فتحت شمعه جديده تحرك الترينغ ستوب وقف لانو في شرط عند فتاح الشمع الجديده يتحرك الترينغ ستوب يعني لح يتحرك مره تانيه عند شمعه التاليه هنا مشكله
انا بدي ياه بس الشمغه الاولى ما يتحرك وباقي الشموع عادي يتحرك او مثال اعطي انا وقت معين يعني بعد 45 دقيقه من فتح الصفقه يتحرك الترينغ
كمان حاولت فيها اني حطة شرط اذا كان وقت افتتاح الصفقه اكبر من 45 دقيقه يتفعل كمان ما زبطت استعنة بي دالة بحث عن تفاصيل اخير صفقه مفعله
هون مشكله يلي واجهتاه صار يطلع وقت فتح صفقه رقم طويلي كتير كمان ما زبطت
وشكرا لك جزيلا
جرب التصحيح التالي :
static bool TSB=false,TSS=false;
void OnInit()
{
TSB=false;
TSS=false;
}
void MoveATRTS()
{
if(Orderscnt(OP_BUY)==0){if(!IsTesting())GlobalVar iableDel(Symbol()+"B");else TSB=false;}
if(Orderscnt(OP_SELL)==0){if(!IsTesting())GlobalVa riableDel(Symbol()+"S");else TSS=false;}
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
double ATT=iATR(NULL,TF,ATR,1)/point;
double ATR1=(HiddenTS/ATT)*100*point;
int cnt,total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
if(NewBar()||(!IsTesting()&&GlobalVariableGet(Symbol()+"B")==10)||(IsTesting()&&TSB==true))//شرط تحريك ترينغ عند شمعه الجديده
if(NormalizeDouble(Ask-(TrailingStep*point),Digits)>NormalizeDouble((op+(ATR1)),Digits))
{
if((NormalizeDouble(sl,Digits)<NormalizeDouble(Bid-(ATR1),Digits))||(sl==0))
{
bool mod=OrderModify(tk,op,NormalizeDouble(Bid-(ATR1),Digits),tp,0,Blue);
if(!IsTesting())GlobalVariableSet(Symbol()+"B",10);else TSB=true;
}
}
}
else
{
if(NewBar()||(!IsTesting()&&GlobalVariableGet(Symbol()+"S")==10)||(IsTesting()&&TSS==true))//شرط تحريك ترينغ عند شمعه الجديده
if(NormalizeDouble(Bid+(TrailingStep*point),Digits )<NormalizeDouble((op-(ATR1)),Digits))
{
if((NormalizeDouble(sl,Digits)>(NormalizeDouble(Ask+(ATR1),Digits)))||(sl==0))
{
mod=OrderModify(tk,op,NormalizeDouble(Ask+(ATR1),D igits),tp,0,Red);
if(!IsTesting())GlobalVariableSet(Symbol()+"S",10);else TSS=true;
}
}
}
}
}
}
بحيث Orderscnt دالة عدد الصفقات المفتوحة بدلالة النوع
int Orderscnt(int type=-1)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&(OrderType()==type||type==-1))
{
cnt++;
}
}
}
return(cnt);
}
kira-h
18-12-2017, 07:36 PM
السلام عليكم استاذ حسن
برمجيا كيف يمكن فتح profiles معين في توقيت واغلاق profiles في توقيت
بمعني انا عندي اكثر من شارت مفتوح اريد من الاكسبيرت اغلاق كل الشارتات المفتوحة في توقيت معين
ثم فتح كل الشارتات مرة اخري في توقيت معين
بارك الله فيك
وعليكم السلام
الكود كالتالي:
#include <WinUser32.mqh>
#import "user32.dll"
int GetAncestor(int, int);
#import
void OnTick()
{
SendMessageA(GetAncestor(WindowHandle(Symbol(),Per iod()),2),WM_COMMAND,34101,0);
//34100 is first profile, 34101 is second, 34102 is third,...
}
sal_moh85
18-12-2017, 07:45 PM
جرب التصحيح التالي :
static bool TSB=false,TSS=false;
void OnInit()
{
TSB=false;
TSS=false;
}
void MoveATRTS()
{
if(Orderscnt(OP_BUY)==0){if(!IsTesting())GlobalVar iableDel(Symbol()+"B");else TSB=false;}
if(Orderscnt(OP_SELL)==0){if(!IsTesting())GlobalVa riableDel(Symbol()+"S");else TSS=false;}
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
double ATT=iATR(NULL,TF,ATR,1)/point;
double ATR1=(HiddenTS/ATT)*100*point;
int cnt,total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
if(NewBar()||(!IsTesting()&&GlobalVariableGet(Symbol()+"B")==10)||(IsTesting()&&TSB==true))//شرط تحريك ترينغ عند شمعه الجديده
if(NormalizeDouble(Ask-(TrailingStep*point),Digits)>NormalizeDouble((op+(ATR1)),Digits))
{
if((NormalizeDouble(sl,Digits)<NormalizeDouble(Bid-(ATR1),Digits))||(sl==0))
{
bool mod=OrderModify(tk,op,NormalizeDouble(Bid-(ATR1),Digits),tp,0,Blue);
if(!IsTesting())GlobalVariableSet(Symbol()+"B",10);else TSB=true;
}
}
}
else
{
if(NewBar()||(!IsTesting()&&GlobalVariableGet(Symbol()+"S")==10)||(IsTesting()&&TSS==true))//شرط تحريك ترينغ عند شمعه الجديده
if(NormalizeDouble(Bid+(TrailingStep*point),Digits )<NormalizeDouble((op-(ATR1)),Digits))
{
if((NormalizeDouble(sl,Digits)>(NormalizeDouble(Ask+(ATR1),Digits)))||(sl==0))
{
mod=OrderModify(tk,op,NormalizeDouble(Ask+(ATR1),D igits),tp,0,Red);
if(!IsTesting())GlobalVariableSet(Symbol()+"S",10);else TSS=true;
}
}
}
}
}
}
بحيث Orderscnt دالة عدد الصفقات المفتوحة بدلالة النوع
int Orderscnt(int type=-1)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&(OrderType()==type||type==-1))
{
cnt++;
}
}
}
return(cnt);
}
مشكور اخ حسن جدا كود تمام بس عندي طلب صغير اذا في مجال تشرح GlobalVariableDel
شو اكتير استخدامات الها
وشكرا جزيلا
Ahmed
18-12-2017, 11:29 PM
وعليكم السلام
الكود كالتالي:
#include <WinUser32.mqh>
#import "user32.dll"
int GetAncestor(int, int);
#import
void OnTick()
{
SendMessageA(GetAncestor(WindowHandle(Symbol(),Per iod()),2),WM_COMMAND,34101,0);
//34100 is first profile, 34101 is second, 34102 is third,...
}
بارك الله فيك اخي حسن الرجاء شرح الكود بطريقة مبسطة
kira-h
19-12-2017, 12:21 AM
بارك الله فيك اخي حسن الرجاء شرح الكود بطريقة مبسطة
قمنا باستخدام المكتبة WinUser32 لأخذ دالة SendMessageA
أما import user32 لاستخدام دالة GetAncestor والتي لم تكن معرفة في مكتبة WinUser32 الموجودة في الحاسوب
هذه الدوال تسمى WinAPI أو Windows API وهي دوال للتعامل مع نظام الوندوز وبرامجه، ويمكن أستعمالها في أغلب اللغات البرمجية.
وبهذا قمنا باستخدام المكتبة لتنفيذ اختصار تفعيل البروفايل Ctrl+F5 على ذلك الشكل
أول بروفايل يرمز له بـ 34100، والبروفايل الثاني 34101 والثالث 34102 وهكذا بالترتيب
استخدم SendMessageA عند تحقق شروط كما تريد
kira-h
19-12-2017, 12:33 AM
مشكور اخ حسن جدا كود تمام بس عندي طلب صغير اذا في مجال تشرح GlobalVariableDel
شو اكتير استخدامات الها
وشكرا جزيلا
راجع المشاركة التالية :دوال الجلوبال (http://www.fxprg.com/vb/showthread.php?t=31457&page=3&p=846193&posted=1#post846193)
Ahmed
19-12-2017, 07:36 AM
قمنا باستخدام المكتبة WinUser32 لأخذ دالة SendMessageA
أما import user32 لاستخدام دالة GetAncestor والتي لم تكن معرفة في مكتبة WinUser32 الموجودة في الحاسوب
هذه الدوال تسمى WinAPI أو Windows API وهي دوال للتعامل مع نظام الوندوز وبرامجه، ويمكن أستعمالها في أغلب اللغات البرمجية.
وبهذا قمنا باستخدام المكتبة لتنفيذ اختصار تفعيل البروفايل Ctrl+F5 على ذلك الشكل
أول بروفايل يرمز له بـ 34100، والبروفايل الثاني 34101 والثالث 34102 وهكذا بالترتيب
استخدم SendMessageA عند تحقق شروط كما تريد
بارك الله فيك اخي حسن
sal_moh85
19-12-2017, 09:45 AM
راجع المشاركة التالية :دوال الجلوبال (http://www.fxprg.com/vb/showthread.php?t=31457&page=3&p=846193&posted=1#post846193)
مشكور اخ حسن
sal_moh85
19-12-2017, 12:45 PM
جرب التصحيح التالي :
static bool TSB=false,TSS=false;
void OnInit()
{
TSB=false;
TSS=false;
}
void MoveATRTS()
{
if(Orderscnt(OP_BUY)==0){if(!IsTesting())GlobalVar iableDel(Symbol()+"B");else TSB=false;}
if(Orderscnt(OP_SELL)==0){if(!IsTesting())GlobalVa riableDel(Symbol()+"S");else TSS=false;}
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
double ATT=iATR(NULL,TF,ATR,1)/point;
double ATR1=(HiddenTS/ATT)*100*point;
int cnt,total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
if(NewBar()||(!IsTesting()&&GlobalVariableGet(Symbol()+"B")==10)||(IsTesting()&&TSB==true))//شرط تحريك ترينغ عند شمعه الجديده
if(NormalizeDouble(Ask-(TrailingStep*point),Digits)>NormalizeDouble((op+(ATR1)),Digits))
{
if((NormalizeDouble(sl,Digits)<NormalizeDouble(Bid-(ATR1),Digits))||(sl==0))
{
bool mod=OrderModify(tk,op,NormalizeDouble(Bid-(ATR1),Digits),tp,0,Blue);
if(!IsTesting())GlobalVariableSet(Symbol()+"B",10);else TSB=true;
}
}
}
else
{
if(NewBar()||(!IsTesting()&&GlobalVariableGet(Symbol()+"S")==10)||(IsTesting()&&TSS==true))//شرط تحريك ترينغ عند شمعه الجديده
if(NormalizeDouble(Bid+(TrailingStep*point),Digits )<NormalizeDouble((op-(ATR1)),Digits))
{
if((NormalizeDouble(sl,Digits)>(NormalizeDouble(Ask+(ATR1),Digits)))||(sl==0))
{
mod=OrderModify(tk,op,NormalizeDouble(Ask+(ATR1),D igits),tp,0,Red);
if(!IsTesting())GlobalVariableSet(Symbol()+"S",10);else TSS=true;
}
}
}
}
}
}
بحيث Orderscnt دالة عدد الصفقات المفتوحة بدلالة النوع
int Orderscnt(int type=-1)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&(OrderType()==type||type==-1))
{
cnt++;
}
}
}
return(cnt);
}
سلام عليكم اخ حسن
في عندك كود تاني لانو هاد الكود في بعض الاحيان عم يرتفع السعر 50 نقطه وما عم يشتغل ما بعرف شو المشكله حتى راقبة جورنال ما عم يطلع ولا خطاء
وشكرا جزيلا
kira-h
19-12-2017, 08:40 PM
سلام عليكم اخ حسن
في عندك كود تاني لانو هاد الكود في بعض الاحيان عم يرتفع السعر 50 نقطه وما عم يشتغل ما بعرف شو المشكله حتى راقبة جورنال ما عم يطلع ولا خطاء
وشكرا جزيلا
وعليكم السلام
شرط استئناف عمل التريلنغ بشكل دائم ليس له علاقة بحركة السعر
kira-h
19-12-2017, 08:40 PM
مشكور اخ حسن
بالتوفيق إن شاء الله
kira-h
19-12-2017, 08:41 PM
بارك الله فيك اخي حسن
وإياك أخي الكريم
والله الموفق
sal_moh85
19-12-2017, 10:10 PM
سلام عليكم اخ حسن هل يوجد طريقه لي حذف ماجيك نمر لي صفقه ووضع مجيك نمبر ثاني
مثال توضيح انا فتحت صفقة شراء و المجيك نمبر كان 2017
فيي احذفه لي مجك نمبر2017 وحط رقم تاني مثال 2018 بعد ما تفعلة الصفقه ولا لازم اغلاق صفقه
وشكرا
kira-h
20-12-2017, 03:40 AM
سلام عليكم اخ حسن هل يوجد طريقه لي حذف ماجيك نمر لي صفقه ووضع مجيك نمبر ثاني
مثال توضيح انا فتحت صفقة شراء و المجيك نمبر كان 2017
فيي احذفه لي مجك نمبر2017 وحط رقم تاني مثال 2018 بعد ما تفعلة الصفقه ولا لازم اغلاق صفقه
وشكرا
وعليكم السلام
لا يمكن تعديل الماجك نمبر والكومنت بعد تفعيل الصفقة
sal_moh85
20-12-2017, 12:38 PM
وعليكم السلام
لا يمكن تعديل الماجك نمبر والكومنت بعد تفعيل الصفقة
مشكور جدا
طيب انا كاتب كود لح ارفقه شو طريقه يلي بخلي يعطي مجك نمبر لصفقات التعديل عشان احسن اتحكم في صفقات شلون ما بدي
يعني في 2 ترينغ ستوب لوز في واحد اسمه MoveATRTS() هاد بدي ياه يتفعل بس مع الصفقات يلي تعدل فيها ستوب لوز تك بروفيت هاد ترينغ حسب السوق بيمشي معه
وتاني ترينغ ستوب لوز MoveTrailingStop() هاد بدي ياه يتفعل مع الصفقات يلي ما تعدلة بكون ترينغ تبع صغير كتير
وشكرا جزيلا
kira-h
20-12-2017, 07:52 PM
مشكور جدا
طيب انا كاتب كود لح ارفقه شو طريقه يلي بخلي يعطي مجك نمبر لصفقات التعديل عشان احسن اتحكم في صفقات شلون ما بدي
يعني في 2 ترينغ ستوب لوز في واحد اسمه MoveATRTS() هاد بدي ياه يتفعل بس مع الصفقات يلي تعدل فيها ستوب لوز تك بروفيت هاد ترينغ حسب السوق بيمشي معه
وتاني ترينغ ستوب لوز MoveTrailingStop() هاد بدي ياه يتفعل مع الصفقات يلي ما تعدلة بكون ترينغ تبع صغير كتير
وشكرا جزيلا
ستقوم بفتح صفقات بماجك نمبر x وفتح صفقات الماجك نمبر مختلف عن x حسب الشروطك
وبالتالي يمكنك التحكم في النوعين من الصفقات كل بماجك نمبر خاص به
sal_moh85
20-12-2017, 08:38 PM
ستقوم بفتح صفقات بماجك نمبر x وفتح صفقات الماجك نمبر مختلف عن x حسب الشروطك
وبالتالي يمكنك التحكم في النوعين من الصفقات كل بماجك نمبر خاص به
مشكور اخ حسن انت شفت الكود يلي انا عامله على كلامك لازم غير الكود كامل صح هاد يلي فهمته من كلامك
kira-h
20-12-2017, 10:59 PM
مشكور اخ حسن انت شفت الكود يلي انا عامله على كلامك لازم غير الكود كامل صح هاد يلي فهمته من كلامك
قم فقط باضافة شروط صفقات بماجك نمبر مثلا MagicNumber1، وشروط صفقات أخرى بماجك نمبر مختلف MagicNumer2، وضع الدوال بدلالة الماجك نمبر int Magic ثم تحكم بها كما تريد بالشروط بالدالة الرئيسية
sal_moh85
21-12-2017, 10:50 AM
قم فقط باضافة شروط صفقات بماجك نمبر مثلا MagicNumber1، وشروط صفقات أخرى بماجك نمبر مختلف MagicNumer2، وضع الدوال بدلالة الماجك نمبر int Magic ثم تحكم بها كما تريد بالشروط بالدالة الرئيسية
سلام عليكم اخ حسن انا ضايف شروط صفقات بي مجك نمبر بس انا ما عندي شروط صفقات اخر عندي دالة تعديل فقط يعني بس عدل الصفقه مو صفقات جديده
kira-h
21-12-2017, 05:16 PM
سلام عليكم اخ حسن انا ضايف شروط صفقات بي مجك نمبر بس انا ما عندي شروط صفقات اخر عندي دالة تعديل فقط يعني بس عدل الصفقه مو صفقات جديده
وعليكم السلام
الأفضل شرح الفكرة كاملة لنرى ما يمكن عمله برمجيا
sal_moh85
22-12-2017, 07:24 PM
وعليكم السلام
الأفضل شرح الفكرة كاملة لنرى ما يمكن عمله برمجيا
انا بعتلك الكود كامل الفكره مشروحه فيه كامله هوه عباره عن اوردراة باي ستوب وسيل ستوب بي مسافه معينه بيعتمد على اختراق وخطف نقاط سريعه اذا ما تعدل الاوردر
اذا تعدل الاوردر بيحدد تيك بروفيت وستوب لوز وترينغ ستوب لوز عن طريقة موشر atr طبعا بهي النقطه ليش عدلت كلشي فيه لانو من منطق انو بدوه يصير حركه جنونيه يا شراء يا بيع
وهي فكره العامه تبعه
وبس هي الفكره العامه
kira-h
22-12-2017, 09:45 PM
انا بعتلك الكود كامل الفكره مشروحه فيه كامله هوه عباره عن اوردراة باي ستوب وسيل ستوب بي مسافه معينه بيعتمد على اختراق وخطف نقاط سريعه اذا ما تعدل الاوردر
اذا تعدل الاوردر بيحدد تيك بروفيت وستوب لوز وترينغ ستوب لوز عن طريقة موشر atr طبعا بهي النقطه ليش عدلت كلشي فيه لانو من منطق انو بدوه يصير حركه جنونيه يا شراء يا بيع
وهي فكره العامه تبعه
وبس هي الفكره العامه
أخي الكريم المرجو شرح الفكرة كاملة وليس الكود (بالعربية وليس باللهجة العامية)،
الكود غير واضح، وكذلك لن أستطيع معرفة الأخطاء والفكرة مبهمة أو غير واضحة
shivaa
25-12-2017, 09:54 PM
السلام عليكم
ممكن مساعد فى داله تحسب عدد الصفقات المفعله فى يوم ثم كتبتها فى ملف اكسل يكون اقسام الملف
تاريخ اليوم
العدد الصفقات
كام صفقه كسبانه
كام صفقه خاسره
كام صفقه شراء
كام صفقه بيع
اكون شاكر
الرجاء الرد
shivaa
25-12-2017, 10:36 PM
السلام عليكم
استاذى فكره الاكسبيرت
هو فتح صفقات فى الاتجاه الترند العام وقفلها عند تحقق ربح 1 دولار
ولكن ممكن فتح صفقه وتكون غير موفق فيها ولكن اكيد الرجوع للترند العام
المطلوب البحث عن الصفقه الخاسره عدد معين من النقط
ثم استخراج منها رقم التكت
وعمل هيدج وان يكون رقم المجك نبرهو رقم التكت
ممكن مساعده فى الفكره لانى حولت ولكن فشلت
kira-h
26-12-2017, 06:42 PM
السلام عليكم
استاذى فكره الاكسبيرت
هو فتح صفقات فى الاتجاه الترند العام وقفلها عند تحقق ربح 1 دولار
ولكن ممكن فتح صفقه وتكون غير موفق فيها ولكن اكيد الرجوع للترند العام
المطلوب البحث عن الصفقه الخاسره عدد معين من النقط
ثم استخراج منها رقم التكت
وعمل هيدج وان يكون رقم المجك نبرهو رقم التكت
ممكن مساعده فى الفكره لانى حولت ولكن فشلت
وعليكم السلام
استخدم دالة لمعرفة خاصية من خصائص الصفقة المفتوحة كالتالي :
double LastOrder(string info,int type=-1)
{
for(int i=OrdersTotal();i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol(),
co=OrderComment();
int ot=OrderType(),
mn=OrderMagicNumber(),
tk=OrderTicket();
double lo=OrderLots(),
op=OrderOpenPrice(),
tp=OrderTakeProfit(),
sl=OrderStopLoss(),
pt=OrderProfit();
datetime tm=OrderOpenTime();
if(sy==Symbol()&&(ot==type||type==-1))
{
if(info=="Type")return(ot);
else if(info=="Lots")return(lo);
else if(info=="Price")return(op);
else if(info=="Time")return(tm);
else if(info=="TP")return(tp);
else if(info=="SL")return(sl);
else if(info=="Profit")return(pt);
else if(info=="Comment")return(co);
else if(info=="Ticket")return(tk);
else if(info=="Magic")return(mn);
}
}
return(0);
}
بحيث info نوع الخاصية
type نوع الصفقة أو بدونها
مثال لمعرفة ربح آخر صفقة مفتوحة كالتالي :
LastOrder("Profit");
لمعرفة ربح آخر صفقة شراء مفتوحة كالتالي :
LastOrder("Profit",OP_BUY);
ولمعرفة رقم تيكت آخر صفقة مفتوحة كالتالي:
LastOrder("Ticket");
وهكذا ببقية الخصائص
shivaa
27-12-2017, 12:05 AM
وعليكم السلام
استخدم دالة لمعرفة خاصية من خصائص الصفقة المفتوحة كالتالي :
double LastOrder(string info,int type=-1)
{
for(int i=OrdersTotal();i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol(),
co=OrderComment();
int ot=OrderType(),
mn=OrderMagicNumber(),
tk=OrderTicket();
double lo=OrderLots(),
op=OrderOpenPrice(),
tp=OrderTakeProfit(),
sl=OrderStopLoss(),
pt=OrderProfit();
datetime tm=OrderOpenTime();
if(sy==Symbol()&&(ot==type||type==-1))
{
if(info=="Type")return(ot);
else if(info=="Lots")return(lo);
else if(info=="Price")return(op);
else if(info=="Time")return(tm);
else if(info=="TP")return(tp);
else if(info=="SL")return(sl);
else if(info=="Profit")return(pt);
else if(info=="Comment")return(co);
else if(info=="Ticket")return(tk);
else if(info=="Magic")return(mn);
}
}
return(0);
}
بحيث info نوع الخاصية
type نوع الصفقة أو بدونها
مثال لمعرفة ربح آخر صفقة مفتوحة كالتالي :
LastOrder("Profit");
لمعرفة ربح آخر صفقة شراء مفتوحة كالتالي :
LastOrder("Profit",OP_BUY);
ولمعرفة رقم تيكت آخر صفقة مفتوحة كالتالي:
LastOrder("Ticket");
وهكذا ببقية الخصائص
شكراا
الان عندى صفقات كثيره ولكن يوجد بيها الخاسره اقل من 100 دولار ليس لها طلب انا عاوز اكبر من 100دولار
ممكن اعرف طريقه اعرف بيها مقدار الخساره ان تكون اكبر من او تساوى 100دولار اذا تحقق الشرط يجمع معلومات الصفقه يعمل هيدج
ممكن كتابه الداله المطلوبه اكون شاكر
kira-h
27-12-2017, 05:24 AM
شكراا
الان عندى صفقات كثيره ولكن يوجد بيها الخاسره اقل من 100 دولار ليس لها طلب انا عاوز اكبر من 100دولار
ممكن اعرف طريقه اعرف بيها مقدار الخساره ان تكون اكبر من او تساوى 100دولار اذا تحقق الشرط يجمع معلومات الصفقه يعمل هيدج
ممكن كتابه الداله المطلوبه اكون شاكر
ستقوم باضافة شرط الربح كالتالي:
double LastOrder(string info,int type=-1)
{
for(int i=OrdersTotal();i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol(),
co=OrderComment();
int ot=OrderType(),
mn=OrderMagicNumber(),
tk=OrderTicket();
double lo=OrderLots(),
op=OrderOpenPrice(),
tp=OrderTakeProfit(),
sl=OrderStopLoss(),
pt=OrderProfit();
datetime tm=OrderOpenTime();
if(sy==Symbol()&&OrderProfit()>100&&(ot==type||type==-1))
{
if(info=="Type")return(ot);
else if(info=="Lots")return(lo);
else if(info=="Price")return(op);
else if(info=="Time")return(tm);
else if(info=="TP")return(tp);
else if(info=="SL")return(sl);
else if(info=="Profit")return(pt);
else if(info=="Comment")return(co);
else if(info=="Ticket")return(tk);
else if(info=="Magic")return(mn);
}
}
return(0);
}
Waddah
28-12-2017, 04:22 PM
السلام عليكم :
أرجو توضيح كيف تتم العملية التالية بواسطة حلقتين for لمؤشر يضع سهم صاعد عند شمعة حجمها (هاي - لو ) اكبر من 20 شمعة سابقة
بواسطة حلقة for واحدة نجحت العملية لكن يضع السهم الأخير - أريده ان يضع الأسهم عند كل شمعة تحقق الشرط
kira-h
28-12-2017, 09:08 PM
السلام عليكم :
أرجو توضيح كيف تتم العملية التالية بواسطة حلقتين for لمؤشر يضع سهم صاعد عند شمعة حجمها (هاي - لو ) اكبر من 20 شمعة سابقة
بواسطة حلقة for واحدة نجحت العملية لكن يضع السهم الأخير - أريده ان يضع الأسهم عند كل شمعة تحقق الشرط
وعليكم السلام
راجع كود المؤشر المرفق
Waddah
30-12-2017, 12:51 PM
وعليكم السلام
راجع كود المؤشر المرفق
مشكور جد أستاذ ما سألت عنه : المؤشر يفحص هاي - لو الشمعة ويقارنها ب هاي-لو لعشرين شمعة سابقة إن كانت أكبر يضع سهم صاعد
حاولت كتابة الكود بالشكل التالي لكن لم أنجح أرجو منك التصحيح
for(int i=1;i<Bars;i++) // all bars on chart
{
for (int j=i+1;j<Back_Check_Candle;j++) // want to check 20 candles back
{
y[i] = (High[i] - Low[i]);
x[j] = (High[j] - Low[j]);
if (y[i] >= x[j]){UpCandle[i] = Low[i]-5*point;} // upCandle : is the indicator buffer (up Arrwo)
}
}
kira-h
30-12-2017, 09:01 PM
مشكور جد أستاذ ما سألت عنه : المؤشر يفحص هاي - لو الشمعة ويقارنها ب هاي-لو لعشرين شمعة سابقة إن كانت أكبر يضع سهم صاعد
حاولت كتابة الكود بالشكل التالي لكن لم أنجح أرجو منك التصحيح
for(int i=1;i<Bars;i++) // all bars on chart
{
for (int j=i+1;j<Back_Check_Candle;j++) // want to check 20 candles back
{
y[i] = (High[i] - Low[i]);
x[j] = (High[j] - Low[j]);
if (y[i] >= x[j]){UpCandle[i] = Low[i]-5*point;} // upCandle : is the indicator buffer (up Arrwo)
}
}
هل تريد مقارنة حجم فارق الهاي واللو لآخر شمعة مغلقة مع فارق أعلى هاي إلى أقل لو لـ 20 شمعة سابقة ؟
وضح الشرط بصورة من الشارت
Waddah
31-12-2017, 03:06 PM
هل تريد مقارنة حجم فارق الهاي واللو لآخر شمعة مغلقة مع فارق أعلى هاي إلى أقل لو لـ 20 شمعة سابقة ؟
وضح الشرط بصورة من الشارت
تماما أستاذ .... كل شمعة يكون فيها الهاي - اللو أكبر من الهاي - اللو لعشرين شمعة سابقة يضع عليها سهم صاعد, أين الخطأ في الكود الذي أرفقته لو سمحت
kira-h
31-12-2017, 10:26 PM
تماما أستاذ .... كل شمعة يكون فيها الهاي - اللو أكبر من الهاي - اللو لعشرين شمعة سابقة يضع عليها سهم صاعد, أين الخطأ في الكود الذي أرفقته لو سمحت
جرب الكود المرفق
Waddah
01-01-2018, 03:17 PM
جرب الكود المرفق
مشكور جدا على الإهتمام أستاذ ....الكود الذي أرفقته يعطي آخر سهم فقط وهذا نجح معي ....لكن المعضلة كيف أطبق هذا على كامل الشارت بحيث يظهر سهم على كل شمعة تحقق الشرط وليس على آخر شمعة تحقق الشرط .... هل العملية ممكنة ؟
shivaa
02-01-2018, 02:56 AM
السلام عليكم
ممكن مساعد في كتابه داله تبحث عن أخر صفقه مفعله تعود بسعر الافتتاح
أذا لم توجد صفقه مفعله تكون البديل لها أخر صفقه مغلقه تعود بسعر الافتتاح
على ذالك ان يكون سعر الافتتاح هو خط الارتكاز
على أساس هذا نعمل مقارنه بين السعر الحالي
إذا كان السعر الحالي اقل من خط الارتكاز الدخول بيع
ذا كان السعر الحالي اكبر من خط الارتكاز الدخول شراء
طلب اخر
كيف اعمل هيدج لصفقه خسرانه مبلغ مقدر من قبل
اكون شاكر
kira-h
02-01-2018, 06:28 PM
السلام عليكم
ممكن مساعد في كتابه داله تبحث عن أخر صفقه مفعله تعود بسعر الافتتاح
أذا لم توجد صفقه مفعله تكون البديل لها أخر صفقه مغلقه تعود بسعر الافتتاح
على ذالك ان يكون سعر الافتتاح هو خط الارتكاز
على أساس هذا نعمل مقارنه بين السعر الحالي
إذا كان السعر الحالي اقل من خط الارتكاز الدخول بيع
ذا كان السعر الحالي اكبر من خط الارتكاز الدخول شراء
طلب اخر
كيف اعمل هيدج لصفقه خسرانه مبلغ مقدر من قبل
اكون شاكر
وعليكم السلام
ستقوم بعمل دالة لمعرفة سعر افتتاح الصفقة المفتوحة وإذا كانت غير مفتوحة سيستخرج سعر افتتاح الصفقة المغلقة كالتالي :
double LastOrderPrice()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select1=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()<=OP_SELL)
{
return(OrderOpenPrice());
}
}
for(int j=OrdersHistoryTotal()-1;j>=0;j--)
{
bool select2=OrderSelect(j,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()<=OP_SELL)
{
return(OrderOpenPrice());
}
}
return(0);
}
بقية الاسئلة غير واضحة
sal_moh85
04-01-2018, 04:16 PM
سلام عليكم اخ حسن ارجو المساعده في توقيت صفقات الاوامر المعلق
عشان يوضح معك
الاومر المعلق كل ساعه
شروط فتح الصفقه
كود PHP:
if(Check1 >= Threshold&& Check2 >= Threshold&& O<H&&Orderscnt(OP_BUY)==0&&Orderscnt(OP_BUYSTOP)==0&&CountOrdersTime()==0&&هنا يجب اضافة شرط لي التحقق من الشروط بي زمن ثانيه على فرض انا حاطة انو يتحقق الشرط خلل 700 ثانيه )
ومن ثم اورد سيند
كود PHP:
bool tk=OrderSend(Symbol(),OP_BUYSTOP,NewLots,pricebuy, 0,SL,TP,"Moh",Magicnumber, هنا زمن انتهاء الاوردر في الساعه يوجد 3600 ثانيه اي هنا يحذف الاورد بعد ساعه كامله انا ما بدي يحذف 700 ثانيه -3600 ثانيه =2900 ثانيه ,Blue);
sal_moh85
04-01-2018, 04:23 PM
توضيح اكثر لي صفقه المراده
تعليق امر عند كل شمعه جديده يوجد شروط لي صفقه كل هذه شروط تحققة في فتره زمنيه انا احددها بي ثانيه على سبيل المثال اريد ان تتحقق الشروط في 720 ثانيه (يعني 12 دقيقه)
في اورد سيند اعطي الامر عند خانة اكسبير الصفقه بقية الوقت الواجب تسكير الصفقه وهو 2880 TimeCurrent() +ثانيه لاني الساعه الواحد 3600 ثانيه
ان شاء لله حسنت وصلك الفكره وشكرا
kira-h
05-01-2018, 03:40 AM
توضيح اكثر لي صفقه المراده
تعليق امر عند كل شمعه جديده يوجد شروط لي صفقه كل هذه شروط تحققة في فتره زمنيه انا احددها بي ثانيه على سبيل المثال اريد ان تتحقق الشروط في 720 ثانيه (يعني 12 دقيقه)
في اورد سيند اعطي الامر عند خانة اكسبير الصفقه بقية الوقت الواجب تسكير الصفقه وهو 2880 TimeCurrent() +ثانيه لاني الساعه الواحد 3600 ثانيه
ان شاء لله حسنت وصلك الفكره وشكرا
اخي لم افهم شيء
اشرح بطريقة افضل مع صورة توضيحية او بالارقام
sal_moh85
05-01-2018, 10:19 AM
اخي لم افهم شيء
اشرح بطريقة افضل مع صورة توضيحية او بالارقام
اخ حسن الحمد لله حسنت حلها لي مشكله مشكور جدا
ib888877
15-01-2018, 11:07 PM
جزاكم الله كل خير
silver
22-01-2018, 01:57 PM
السلام عليكم ورحمة الله وبركاته
ألأستاذ القدير حسن أتمنى أن تكون بأفضل حال
عندي استفسار بخصوص ما يسمى بنظام high frequency trading
يعني كيف أخلي الاكسبيرت يعمل بهذا النظام
هل يوجد كود معين مثلا أضيفه داخل الاكسبيرت ؟
أم هل مثلا أضيف برنامج معين على الويندوز حتى يعمل الاكسبيرت بهذا النظام ؟
أتمنى ايضاح جميع الخطوات المطلوبة فضلا منك لو تكرمت أستاذنا العزيز
kira-h
22-01-2018, 07:52 PM
السلام عليكم ورحمة الله وبركاته
ألأستاذ القدير حسن أتمنى أن تكون بأفضل حال
عندي استفسار بخصوص ما يسمى بنظام high frequency trading
يعني كيف أخلي الاكسبيرت يعمل بهذا النظام
هل يوجد كود معين مثلا أضيفه داخل الاكسبيرت ؟
أم هل مثلا أضيف برنامج معين على الويندوز حتى يعمل الاكسبيرت بهذا النظام ؟
أتمنى ايضاح جميع الخطوات المطلوبة فضلا منك لو تكرمت أستاذنا العزيز
وعليكم السلام
أخي الكريم
ما اعلمه هو انه يعتمد على أنظمة جد معقدة ومتطورة وتستخدم فقط بصناديق التحوط للنخبة وليست للعامة
Ahmed
23-01-2018, 11:37 AM
السلام عليكم استاذ حسن
كيف ازيل رسايل التحذير من هذا الكود
int CurrOrderOpenTime(){ int datetime_Order; for (int i = 0; i < OrdersTotal(); i++) { if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()== 1234) { datetime_Order = OrderOpenTime(); break; } } } return (datetime_Order);}
silver
23-01-2018, 12:09 PM
وعليكم السلام
أخي الكريم
ما اعلمه هو انه يعتمد على أنظمة جد معقدة ومتطورة وتستخدم فقط بصناديق التحوط للنخبة وليست للعامة
شكرا على الرد أستاذ حسن
نعم حسب ما أعلم أنه يعتمد على خوارزميات معقدة ولكني للأسف لا أعلم أي شئ عن كيفية برمجتها
ولا أدري إن كان يتم دمج لغة mql4 مع لغات برمجة أخرى والعلم عند الله وحده سبحانه
وللمعلومة أستاذ حسن أنا كنت شاهد عيان على أحد الأخوة العرب يقوم بإستعمال هذا النظام وهو مجرد فرد وليس تابع لأي مجموعة
ولكنه لم يستخدم منصة الميتاتريدر
أضف إلى ذلك بأنه توجد مقاطع عدة في اليوتيوب عن بعض الأشخاص استعملوا هذا النظام على الميتاتريدر ولكن لا أعلم إن كانوا صادقين فعلا أم مجرد خدعة
ما رأيك أستاذ حسن هل يمكن عمل هذا النظام على الميتاتريدر
وإذا كان الجواب بأنه بمكن العمل على الميتاتريدر هل صحيح أستاذ حسن أنها لا تحتوي على أي عدة لغات برمجية أخرى سوى mql4 وبالتالي يمكنك برمجة استراتيجية معينة تعمل وفق هذا النظام
أم أن الأمر أكثر تعقيدا ويحتاج النظام إلى شخص يدمج عدة لغات برمجية أخرى معقدة مع mql4
sal_moh85
23-01-2018, 07:45 PM
سلام عليكم اخ حسن ارجو المساعده في عمل هذا اكسبريت في المرفق
يوجد في اعدادات خيار open وهذا الخيار هو سعر فتح الصفقه
فكرة اكسبريت بسيطه جدا على فرض open= 1.22000 يورو دولار
شرط فتح صفقة الشراء المعلقه=كلوز 0 اصغر من open الموجوده في الاعدادات and شمعه هابطه and الفرق بين كلوز 0 وopen الاعدادات = 10 نقاط
طبعا كل شرح السابق مطبق داخل اكسبريت بحذافيره تعديل يلي انا عاوز اعدله انا وضعة open =1.22000
وسعر طلع برات نطاق 1.22000 خالص هنا وقف عمل اكسبريت لازم اعدل السعر open يدويا على 1.21000 او على 1.2300
انا عاوز السعر يتحدد اتوماتيك كل 100 نقطه او خمسين نقطه هل هاد ممكن وشكرا جزيلا
sal_moh85
23-01-2018, 07:46 PM
سلام عليكم اخ حسن ارجو المساعده في عمل هذا اكسبريت في المرفق
يوجد في اعدادات خيار open وهذا الخيار هو سعر فتح الصفقه
فكرة اكسبريت بسيطه جدا على فرض open= 1.22000 يورو دولار
شرط فتح صفقة الشراء المعلقه=كلوز 0 اصغر من open الموجوده في الاعدادات and شمعه هابطه and الفرق بين كلوز 0 وopen الاعدادات = 10 نقاط
طبعا كل شرح السابق مطبق داخل اكسبريت بحذافيره تعديل يلي انا عاوز اعدله انا وضعة open =1.22000
وسعر طلع برات نطاق 1.22000 خالص هنا وقف عمل اكسبريت لازم اعدل السعر open يدويا على 1.21000 او على 1.2300
انا عاوز السعر يتحدد اتوماتيك كل 100 نقطه او خمسين نقطه هل هاد ممكن وشكرا جزيلا
kira-h
24-01-2018, 02:30 AM
شكرا على الرد أستاذ حسن
نعم حسب ما أعلم أنه يعتمد على خوارزميات معقدة ولكني للأسف لا أعلم أي شئ عن كيفية برمجتها
ولا أدري إن كان يتم دمج لغة mql4 مع لغات برمجة أخرى والعلم عند الله وحده سبحانه
وللمعلومة أستاذ حسن أنا كنت شاهد عيان على أحد الأخوة العرب يقوم بإستعمال هذا النظام وهو مجرد فرد وليس تابع لأي مجموعة
ولكنه لم يستخدم منصة الميتاتريدر
أضف إلى ذلك بأنه توجد مقاطع عدة في اليوتيوب عن بعض الأشخاص استعملوا هذا النظام على الميتاتريدر ولكن لا أعلم إن كانوا صادقين فعلا أم مجرد خدعة
ما رأيك أستاذ حسن هل يمكن عمل هذا النظام على الميتاتريدر
وإذا كان الجواب بأنه بمكن العمل على الميتاتريدر هل صحيح أستاذ حسن أنها لا تحتوي على أي عدة لغات برمجية أخرى سوى mql4 وبالتالي يمكنك برمجة استراتيجية معينة تعمل وفق هذا النظام
أم أن الأمر أكثر تعقيدا ويحتاج النظام إلى شخص يدمج عدة لغات برمجية أخرى معقدة مع mql4
هذا النظام ليس للافراد "نحن" ولن توافق عليه شركات الوساطة مهما كانت قوتها وستعتبر صفقاته من نوع الاربيتراج المخالف لقوانين المضاربة
وأكيد نظام يحتاج إلى لغات برمجية أخرى ذات إمكانيات كبيرة وليس كالـ mql المحدودة وحاسوب قوي جدا...
kira-h
24-01-2018, 02:33 AM
سلام عليكم اخ حسن ارجو المساعده في عمل هذا اكسبريت في المرفق
يوجد في اعدادات خيار open وهذا الخيار هو سعر فتح الصفقه
فكرة اكسبريت بسيطه جدا على فرض open= 1.22000 يورو دولار
شرط فتح صفقة الشراء المعلقه=كلوز 0 اصغر من open الموجوده في الاعدادات and شمعه هابطه and الفرق بين كلوز 0 وopen الاعدادات = 10 نقاط
طبعا كل شرح السابق مطبق داخل اكسبريت بحذافيره تعديل يلي انا عاوز اعدله انا وضعة open =1.22000
وسعر طلع برات نطاق 1.22000 خالص هنا وقف عمل اكسبريت لازم اعدل السعر open يدويا على 1.21000 او على 1.2300
انا عاوز السعر يتحدد اتوماتيك كل 100 نقطه او خمسين نقطه هل هاد ممكن وشكرا جزيلا
وعليكم السلام
المرجو التوضيح بصورة من الشارت
sal_moh85
24-01-2018, 11:12 PM
http://www.fxprg.com/vb/attachment.php?attachmentid=4930&stc=1
وعليكم السلام
المرجو التوضيح بصورة من الشارت
سلام عليكم اخ حسن هي صوره التوضيح وبرجو انك تنزل اكسبريت بشان تحسن تفهم يلي بدب ياه اكتير وشكرا جزيلا
kira-h
25-01-2018, 10:08 PM
سلام عليكم اخ حسن هي صوره التوضيح وبرجو انك تنزل اكسبريت بشان تحسن تفهم يلي بدب ياه اكتير وشكرا جزيلا
وعليكم السلام
لم افهم المطلوب فالشرح غير واضح
sal_moh85
26-01-2018, 06:19 PM
وعليكم السلام
لم افهم المطلوب فالشرح غير واضح
سلام عليكم اخ حسن
المطلوب با ختصار طريقه تحديد السعر اتوماتيك من قبل الاكسبريت بفارق 100 نقط صعودا ونزول وبس لما تنزل اكسبريت عندك لحالك لح تعرف المطوب يعني من شو عم يعاني الاكسبريت
طلب تاني طريقة عمل كود max order
على فرض max order =10
عند كل اشارة شراء او بيع يفتح صفقه واحده فقط الى حد 10 صفقات وشكرا
sabil
30-01-2018, 03:16 PM
عايز دالة تقفل اخر اوردر فقط بدلالة النوع حتى لو عندنا الف اوردر
وفي نفس الوقت تقفل بعد اغلاق الشمعة الجديدة
kira-h
30-01-2018, 06:26 PM
عايز دالة تقفل اخر اوردر فقط بدلالة النوع حتى لو عندنا الف اوردر
وفي نفس الوقت تقفل بعد اغلاق الشمعة الجديدة
الدالة كالتالي (وبالمرفق) :
void CloseAtNextBar()
{
if(Time[0]!=Time[1]&&Volume[0]==1)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()<=OP_SELL)
{
if(OrderOpenTime()<Time[0])
{
bool close=OrderClose(OrderTicket(),OrderLots(),OrderOp enPrice(),5,Red);
if(Volume[0]>0)return;
}
}
}
}
}
}
sabil
30-01-2018, 08:37 PM
الدالة كالتالي (وبالمرفق) :
void CloseAtNextBar()
{
if(Time[0]!=Time[1]&&Volume[0]==1)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()<=OP_SELL)
{
if(OrderOpenTime()<Time[0])
{
bool close=OrderClose(OrderTicket(),OrderLots(),OrderOp enPrice(),5,Red);
if(Volume[0]>0)
return;
}
}
}
}
}
}
اخي حسن وضح الدالة ماذا تفعل ؟
لا هي بتقفل اخر اوردر بدلالة النوع ولا بتقفل بعد اغلاق شمعة
اخبرني بتفاصيل الدالة وكيف استدعيها داخل الدالة لتعمل مع كل تكة وبشروط عند الاغلاق
kira-h
30-01-2018, 10:49 PM
اخي حسن وضح الدالة ماذا تفعل ؟
لا هي بتقفل اخر اوردر بدلالة النوع ولا بتقفل بعد اغلاق شمعة
اخبرني بتفاصيل الدالة وكيف استدعيها داخل الدالة لتعمل مع كل تكة وبشروط عند الاغلاق
في الأصل غير ممكن عمل دالة اغلاق آخر صفقة دون صفقات قبلها التي من نفس النوع، لأنه عند إغلاق الصفقة الأخيرة تصبح الصفقة السابقة هي الاخيرة وهكذا سيغلق كل الصفقات
لهذا يوجد شرط الفوليوم، أي بمجرد اغلاق أول صفقة وبعدها تحقق فوليوم الشمعة أكبر من الصفر يعود إلى بداية الدالة فيجد شرط الفوليوم غير محقق ويتوقف عن الاغلاق، وبالتالي يتم إغلاق صفقة واحدة الأخيرة
وبهذا يشترط وجود تنفيذ سريع وجيد بشركة الوساطة، لأنه إذا قفز السعر أو لم يتم الاغلاق عند التنفيذ لن يتحقق الشرط من جديد إلا بشمعة جديدة
الدالة بدلالة النوع بالمرفق
sabil
31-01-2018, 12:26 AM
في الأصل غير ممكن عمل دالة اغلاق آخر صفقة دون صفقات قبلها التي من نفس النوع، لأنه عند إغلاق الصفقة الأخيرة تصبح الصفقة السابقة هي الاخيرة وهكذا سيغلق كل الصفقات
لهذا يوجد شرط الفوليوم، أي بمجرد اغلاق أول صفقة وبعدها تحقق فوليوم الشمعة أكبر من الصفر يعود إلى بداية الدالة فيجد شرط الفوليوم غير محقق ويتوقف عن الاغلاق، وبالتالي يتم إغلاق صفقة واحدة الأخيرة
وبهذا يشترط وجود تنفيذ سريع وجيد بشركة الوساطة، لأنه إذا قفز السعر أو لم يتم الاغلاق عند التنفيذ لن يتحقق الشرط من جديد إلا بشمعة جديدة
الدالة بدلالة النوع بالمرفق
تمام شكراً لك
kira-h
31-01-2018, 02:01 AM
تمام شكراً لك
بالتوفيق إن شاء الله
sabil
02-02-2018, 05:03 AM
عايز دالة عند تحقق الشروط في الدقيقة الاولى من افتتاح الشمعة يفتح الصفقة غير كده لا يفتح صفقات حتى لو تحققت الشروط في الدقيقة الثانية او الثالثة ... الخ.
فرضا اني شغال على فريم 4 ساعات او فريم الساعة
kira-h
02-02-2018, 06:43 AM
عايز دالة عند تحقق الشروط في الدقيقة الاولى من افتتاح الشمعة يفتح الصفقة غير كده لا يفتح صفقات حتى لو تحققت الشروط في الدقيقة الثانية او الثالثة ... الخ.
فرضا اني شغال على فريم 4 ساعات او فريم الساعة
السلام عليكم
ستقارن التوقيت الحالي مع توقيت افتتاح الشمعة كالتالي:
if((TimeCurrent()-Time[0])<60)//...
60 ثانية
sabil
02-02-2018, 12:06 PM
السلام عليكم
ستقارن التوقيت الحالي مع توقيت افتتاح الشمعة كالتالي:
[PHP]
if((TimeCurrent()-Time[0])
60 ثانية
شكرا ياهندسة
جاري التجربة ...
kira-h
02-02-2018, 05:18 PM
شكرا ياهندسة
جاري التجربة ...
بالتوفيق إن شاء الله
Waddah
06-02-2018, 04:59 PM
السلام عليكم
يرجى تصحيح الكود التالي وهو لمعرفة آخر تقاطع لمصفوفة أزواج مع مستوى 70 لمؤشر RSI (يعني هل آخر تقاطع كان لمستوى 70 او 30 )
for(i=0;i<28;i++) {
for(j=1;j<iBars(pairs[i],PERIOD_D1);j++) {
double D1 = iRSI(pairs[i],PERIOD_D1,14,0,j);
double D1_2 = iRSI(pairs[i],PERIOD_D1,14,0,j+1);
if (D1<70 && D1_2 > 70)
{----------}
kira-h
06-02-2018, 06:52 PM
السلام عليكم
يرجى تصحيح الكود التالي وهو لمعرفة آخر تقاطع لمصفوفة أزواج مع مستوى 70 لمؤشر RSI (يعني هل آخر تقاطع كان لمستوى 70 او 30 )
for(i=0;i<28;i++) {
for(j=1;j<iBars(pairs[i],PERIOD_D1);j++) {
double D1 = iRSI(pairs[i],PERIOD_D1,14,0,j);
double D1_2 = iRSI(pairs[i],PERIOD_D1,14,0,j+1);
if (D1<70 && D1_2 > 70)
{----------}
وعليكم السلام
جرب الكود التالي
بحيث إذا كان آخر تقاطع لمستوى 70 ستكون نتيجة الدالة 1، وإذا 30 ستكون النتيجة 1-
int LastBreak()
{
for(i=0;i<28;i++)
{
for(j=1;j<iBars(pairs[i],PERIOD_D1);j++)
{
double D1 = iRSI(pairs[i],PERIOD_D1,14,0,j);
double D1_2 = iRSI(pairs[i],PERIOD_D1,14,0,j+1);
if (D1<70 && D1_2>=70)return(1);
if (D1>30 && D1_2<=30)return(-1);
}
}
return(0);
}
Waddah
07-02-2018, 11:17 AM
وعليكم السلام
جرب الكود التالي
بحيث إذا كان آخر تقاطع لمستوى 70 ستكون نتيجة الدالة 1، وإذا 30 ستكون النتيجة 1-
int LastBreak()
{
for(i=0;i<28;i++)
{
for(j=1;j<iBars(pairs[i],PERIOD_D1);j++)
{
double D1 = iRSI(pairs[i],PERIOD_D1,14,0,j);
double D1_2 = iRSI(pairs[i],PERIOD_D1,14,0,j+1);
if (D1<70 && D1_2>=70)return(1);
if (D1>30 && D1_2<=30)return(-1);
}
}
return(0);
}
لم تنجح أستاذ نفس نتيجتي السابقة -لا توجد رسائل خطأ في الجورنال - ودائما يعيد القيمة 1
kira-h
07-02-2018, 06:00 PM
لم تنجح أستاذ نفس نتيجتي السابقة -لا توجد رسائل خطأ في الجورنال - ودائما يعيد القيمة 1
طيب استخدم الدالة بدلالة الزوج وعند استدعائها تضع اسم الزوج
مثال :
int LastBreak(string symbol)
{
for(j=1;j<iBars(symbol,PERIOD_D1);j++)
{
double D1 = iRSI(symbol,PERIOD_D1,14,0,j);
double D1_2 = iRSI(symbol,PERIOD_D1,14,0,j+1);
if (D1<70 && D1_2>=70)return(1);
if (D1>30 && D1_2<=30)return(-1);
}
return(0);
}
LastBreak(pairs[i]);
// Or
LastBreak(Symbol());
Waddah
08-02-2018, 12:26 PM
طيب استخدم الدالة بدلالة الزوج وعند استدعائها تضع اسم الزوج
مثال :
int LastBreak(string symbol)
{
for(j=1;j<iBars(symbol,PERIOD_D1);j++)
{
double D1 = iRSI(symbol,PERIOD_D1,14,0,j);
double D1_2 = iRSI(symbol,PERIOD_D1,14,0,j+1);
if (D1<70 && D1_2>=70)return(1);
if (D1>30 && D1_2<=30)return(-1);
}
return(0);
}
LastBreak(pairs[i]);
// Or
LastBreak(Symbol());
مشكور جدا ...نجحت بالطريقة الأخيرة ....السؤال أين كان الخطأ في الكود الذي كتبته انا أو الكود في ردك الأول ....منطقيا الكودات صحيحة ولا يوجد أخطاء في الجورنال لماذا النتائج غير صحيحة كانت ؟؟؟؟
kira-h
09-02-2018, 08:07 PM
مشكور جدا ...نجحت بالطريقة الأخيرة ....السؤال أين كان الخطأ في الكود الذي كتبته انا أو الكود في ردك الأول ....منطقيا الكودات صحيحة ولا يوجد أخطاء في الجورنال لماذا النتائج غير صحيحة كانت ؟؟؟؟
هذا على حسب كيف عرفت المصفوفة pairs، بحيث دالة الاستدعاء LastBreak لا تتعرف على ما بداخل المصفوفة
forex007
13-02-2018, 05:52 PM
السلام عليكم
اذا سمحتوا شباب ابحث عن فونكشن تحسب حجم لوت بناء على الاستوب بمواصفات خاصة تطبق الشروط التالية :
1- نسبة المخاطرة تحسب حسب وقف الخسارة مثلاً وقف الخسارة 5 نقاط اذا ضرب الاستوب بكون خسرت 1 % او بمرر لها قيمة مثل 0.5% يعني اقل من 1 %
2- اذا دخلنا الصفقة صاحبة ماجك نمبر مثلا 12345 ضرب فيها الاستوب على خسارة ونحن اساسا قمنا بدخول بحجم لوت 1 % فيها ..الصفقة القادمة بما اني خسران فيها يدخل بنفس حجم لوت الخسران "يحمل نفس ماجك نمبر " وهذا لايعني ضرب الاستوب ندخل بنفس العقد لا لانه اساسا نستخدم تريلنج الاستوب ومطارده الارباح وشيئ طبيعي يضرب الاستوب وقد يضرب على ربح .. لكن الفونكشن تقوم بفحص مالمحصلة التي ضرب عندها وقف الخسارة هل في ربح ؟ او في خسارة ؟ اذا في ربح تستعمل بالعقد التالي النسبة التي قمنا بتمريرها مثلا 1% وعند الاغلاق على خسارة يتجاهل النسبة ويدخل باخر عقد خسرنا فيه والذي يمتلك نفس ماجك نمبر لانه ممكن نشغله ع اكثر من زوج وكل زوج يكون له ماجك نمبر خاص به ..
3- هذه الخاصية بنفس الفونكشن تكون اكثر تهوراً بالادارة المالية طبعا تكون اختياريه مثل يكون معرفين متغير من نوع bool اسمه fixed اذا كان true عند تشغيل الاكسبيرت يشوف ماهو اعلى مبلغ موجود بالحساب مثلا 500$ دخل بعقد 0.10 وضرب الاستوب يقوم الكود بالنظر للحساب هل هو 500$ او اكثر ؟ اذا اقل او يساوي يفتح نفس العقد الخسران ويتجاهل النسبة يعني يرجع يفتح 0.10 اصبح المبلغ مثلاً 510$ هنا الكود يشوف الحساب ويخزنها بمتغر مثلا maxAccount ويبدء يدخل بنسبة 1% فرضاً اعطانا 0.11 وضرب عندها الاستوب واصبح المبلغ 505$ هنا خسرنا يتجاهل النسبة 1% ويرجع يدخل بعقد 0.11 وهكذا ...
طبعا الخاصية رقم 3 تكون اختيارية
بالاخير الفونكشن وظيفتها فقط تعيد لي حجم العقد وانا افقط استدعيها
إن شاء الله ماتكون الفكرة معقدة :pride:
جزاكم الله خير
sabil
14-02-2018, 12:34 AM
السلام عليكم
ستقارن التوقيت الحالي مع توقيت افتتاح الشمعة كالتالي:
if((TimeCurrent()-Time[0])<60)//...
60 ثانية
https://www.fxprg.com/vb/showthread.php?t=31457&p=877518&viewfull=1#post877518
طيب ولو عايز اقول في الخمس دقايق الاولى الشروط لم تكتمل
وبعدين اكتملت في الدقيقة السادسة
sal_moh85
15-02-2018, 01:18 PM
سلام عليكم اخ حسن انا مساوي دالة
بدي من هل داله تعطين قمة cعند فتح الشمعه فقط وشكرا
double PV() { double P=Point*10; double ihigh_0 = iHigh(NULL,PERIOD_M15, 0); double ilow_0 = iLow(NULL, PERIOD_M15, 0); double iClose_0 = iClose(NULL, PERIOD_M15, 0); double P0 = (ihigh_0 + ilow_0)/2 ;//---- double ihigh_1 = iHigh(NULL, PERIOD_M15, 1); double ilow_1 = iLow(NULL, PERIOD_M15, 1); double iClose_1 = iClose(NULL,PERIOD_M15, 1); double P1 = (ihigh_1 + ilow_1 + iClose_1 + iClose_1)/4 ; //---- double C=(P0-P1)/P;
return(NormalizeDouble(C,Digits)); }
sal_moh85
15-02-2018, 01:20 PM
سلام عليكم اخ حسن انا مساوي دالة
بدي من هل داله تعطين قمة cعند فتح الشمعه فقط وشكرا
double PV() { double P=Point*10; double ihigh_0 = iHigh(NULL,PERIOD_M15, 0); double ilow_0 = iLow(NULL, PERIOD_M15, 0); double iClose_0 = iClose(NULL, PERIOD_M15, 0); double P0 = (ihigh_0 + ilow_0)/2 ;//---- double ihigh_1 = iHigh(NULL, PERIOD_M15, 1); double ilow_1 = iLow(NULL, PERIOD_M15, 1); double iClose_1 = iClose(NULL,PERIOD_M15, 1); double P1 = (ihigh_1 + ilow_1 + iClose_1 + iClose_1)/4 ; //---- double C=(P0-P1)/P;
return(NormalizeDouble(C,Digits)); }
double PV() { double P=Point*10; double ihigh_0 = iHigh(NULL,PERIOD_M15, 0); double ilow_0 = iLow(NULL, PERIOD_M15, 0); double iClose_0 = iClose(NULL, PERIOD_M15, 0); double P0 = (ihigh_0 + ilow_0)/2 ;//---- double ihigh_1 = iHigh(NULL, PERIOD_M15, 1); double ilow_1 = iLow(NULL, PERIOD_M15, 1); double iClose_1 = iClose(NULL,PERIOD_M15, 1); double P1 = (ihigh_1 + ilow_1 + iClose_1 + iClose_1)/4 ; //---- double C=(P0-P1)/P;
return(NormalizeDouble(C,Digits)); }
ما بعرف ليش هيك عم تطلع داله بس لما خملها على موقع
double PV()
{
double P=Point*10;
double ihigh_0 = iHigh(NULL,PERIOD_M15, 0);
double ilow_0 = iLow(NULL, PERIOD_M15, 0);
double iClose_0 = iClose(NULL, PERIOD_M15, 0);
double P0 = (ihigh_0 + ilow_0)/2 ;
//----
double ihigh_1 = iHigh(NULL, PERIOD_M15, 1);
double ilow_1 = iLow(NULL, PERIOD_M15, 1);
double iClose_1 = iClose(NULL,PERIOD_M15, 1);
double P1 = (ihigh_1 + ilow_1 + iClose_1 + iClose_1)/4 ;
//----
double C=(P0-P1)/P;
return(NormalizeDouble(C,Digits));
}
kira-h
15-02-2018, 05:16 PM
سلام عليكم اخ حسن انا مساوي دالة
بدي من هل داله تعطين قمة cعند فتح الشمعه فقط وشكرا
double PV() { double P=Point*10; double ihigh_0 = iHigh(NULL,PERIOD_M15, 0); double ilow_0 = iLow(NULL, PERIOD_M15, 0); double iClose_0 = iClose(NULL, PERIOD_M15, 0); double P0 = (ihigh_0 + ilow_0)/2 ;//---- double ihigh_1 = iHigh(NULL, PERIOD_M15, 1); double ilow_1 = iLow(NULL, PERIOD_M15, 1); double iClose_1 = iClose(NULL,PERIOD_M15, 1); double P1 = (ihigh_1 + ilow_1 + iClose_1 + iClose_1)/4 ; //---- double C=(P0-P1)/P;
return(NormalizeDouble(C,Digits)); }
وعليكم السلام
ستقوم باستدعاء الدالة لحظة افتتاح الشمعة فقط
مثال :
datetime time=0;
void OnTick()
{
if(time!=Time[0]&&Volume[0]<=2)
{
PV();
time=Time[0]:
}
}
sal_moh85
15-02-2018, 06:27 PM
وعليكم السلام
ستقوم باستدعاء الدالة لحظة افتتاح الشمعة فقط
مثال :
datetime time=0;
void OnTick()
{
if(time!=Time[0]&&Volume[0]<=2)
{
PV();
time=Time[0]:
}
}
مشكور اخ حسن طيب انا استعيدت الداله بس عند افتتاح الشمعه شلون بدي حطها بي شرط البيع او الشراء
وسال تاني بي نسبه لي اوامر المعلقه سبريد وين منضيفوه يعني منضيفه بس على تك يروفت وستوب لوز ولا يوجد له اضافات تانيه وشكرا
kira-h
15-02-2018, 06:35 PM
مشكور اخ حسن طيب انا استعيدت الداله بس عند افتتاح الشمعه شلون بدي حطها بي شرط البيع او الشراء
وسال تاني بي نسبه لي اوامر المعلقه سبريد وين منضيفوه يعني منضيفه بس على تك يروفت وستوب لوز ولا يوجد له اضافات تانيه وشكرا
ستقوم بأضافة الشرط
if(time!=Time[0]&&Volume[0]<=2)
مع شروط فتح الصفقة
وبعد دالة OrderSend قم باضافة الصيغة أسفلها مباشرة:
time=Time[0]:
* لكن سيتم فتح الأمر مرة واحدة بالشمعة ولن يتكرر بسبب تلك الشروط المضافة
بالنسبة للاوامر المعلقة ستقوم بحساب سعر الأمر المعلق بالأسك أو البيد على حسب نوع الأمر يعني الشراء المعلق بالاسك والبيع المعلق بالبيد وبهذا سيتم احتساب قيمة السبريد
sal_moh85
15-02-2018, 06:35 PM
مشكور اخ حسن طيب انا استعيدت الداله بس عند افتتاح الشمعه شلون بدي حطها بي شرط البيع او الشراء
وسال تاني بي نسبه لي اوامر المعلقه سبريد وين منضيفوه يعني منضيفه بس على تك يروفت وستوب لوز ولا يوجد له اضافات تانيه وشكرا
شرط الشراء PV()>1&&PV()<10 بس طبعا قيمة pv عند افتتاح الشمعه
mr.forex
16-02-2018, 04:22 AM
السلام عليكم
صباح الخير أستاذ حسن
لو تكرمت ماهو كود دالة تعديل الستوب لوس وفق مؤشر الباربوليك سار
بمعنى أنه دائما يتم تعديل الستوب لوس لكل شمعة حالية وفق القيمة الحالية للباربوليك سار
مع جزيل شكري لك مقدما
kira-h
16-02-2018, 05:37 PM
السلام عليكم
صباح الخير أستاذ حسن
لو تكرمت ماهو كود دالة تعديل الستوب لوس وفق مؤشر الباربوليك سار
بمعنى أنه دائما يتم تعديل الستوب لوس لكل شمعة حالية وفق القيمة الحالية للباربوليك سار
مع جزيل شكري لك مقدما
وعليكم السلام
دالة الموديفاي الصفقة حسب اشارة السار كالتالي:
void OrdersModify()
{
bool s,m;
double sar=iSAR(Symbol(),0,0.02,0.2,1);
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
int tk=OrderTicket(),
ty=OrderType(),
mn=OrderMagicNumber();
if(sy==Symbol()&&mn==MagicNo)
{
if(ty==OP_SELL)
{
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(sar ,Digits)&&Close[1]<sar)m=OrderModify(tk,op,sar,tp,0,Red);
}
if(ty==OP_BUY)
{
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(sar ,Digits)&&Close[1]>sar)m=OrderModify(tk,op,sar,tp,0,Blue);
}
}
}
}
mr.forex
17-02-2018, 04:17 AM
وعليكم السلام
دالة الموديفاي الصفقة حسب اشارة السار كالتالي:
void OrdersModify()
{
bool s,m;
double sar=iSAR(Symbol(),0,0.02,0.2,1);
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
int tk=OrderTicket(),
ty=OrderType(),
mn=OrderMagicNumber();
if(sy==Symbol()&&mn==MagicNo)
{
if(ty==OP_SELL)
{
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(sar ,Digits)&&Close[1]<sar)m=OrderModify(tk,op,sar,tp,0,Red);
}
if(ty==OP_BUY)
{
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(sar ,Digits)&&Close[1]>sar)m=OrderModify(tk,op,sar,tp,0,Blue);
}
}
}
}
كعادتك مبدع دائما أستاذ حسن
ألف شكر لك .. الله يخليك لنا يا غالي
Waddah
17-02-2018, 01:31 PM
السلام عليكم أستاذ
Point ماذا تعني ؟
عند كتابةالأمر التالي يعيد القيمة 0
Comment(Point);
اما في ملفات الريفرنس تم تعريفها :
The current symbol point value in the quote currency
kira-h
17-02-2018, 07:37 PM
كعادتك مبدع دائما أستاذ حسن
ألف شكر لك .. الله يخليك لنا يا غالي
العفو اخي والله الموفق
kira-h
17-02-2018, 08:07 PM
السلام عليكم أستاذ
Point ماذا تعني ؟
عند كتابةالأمر التالي يعيد القيمة 0
Comment(Point);
اما في ملفات الريفرنس تم تعريفها :
The current symbol point value in the quote currency
وعليكم السلام
Point هي قيمة النقطة للزوج الحالي
مثلا لو سعر الزوج به 4 أرقام بعد الفاصلة تكون قيمةالنقطة 0.0001، أي أنه لو السعر ارتفع من 1.2001 إلى 1.2002 نقول أنه ارتفع بقيمةنقطة واحدة،
ولو السعر به 5 أرقام فالـ Point ستكون قيمتها 0.00001، أي لوارتفع السعر من 1.20001 إلى 1.20002 نقول أنه ارتفع السعر بقيمة نقطة واحدة وهذابرمجيا، لأنه في الحقيقة ارتفع تكة واحدة فقط وليس نقطة
لهذا نقوم بإضافة شروط لتقنين قيمة الـ Point حتى يتعرف قيمة النقطة سواء السعر كان 4 او 5 أرقام
نفس الشيء بأزواج الين وغيرها التي بها 3 أرقام بعد الفاصلة تكون قيمتها مثل قيمة الأزواج التي بها رقمين بعد الفاصلة
والشروط هي كالتالي نضعها بالدالة OnInit
double point;
int OnInit()
{
if(_Digits<4)point=0.01;else point=0.0001;
return(INIT_SUCCEEDED);
}
بمعنى إذا كان عدد الارقام بعد الفاصلة أصغر قطعا من 4 (مثل ازواج الين) تكون قيمة النقطة 0.01
وإذا كانت عدد الارقام بعد الفاصلة أكبر من أو يساوي 4 مثل اليورودولار تكون قيمة النقطة 0.0001
وبهذا عوض استخدام الـ Point نستخدم الـ point المعرفة ببداية عمل الكود، حتى نتفادى مشكلة قيمة نقطة الاسعار باختلاف الأزواج والمنصات
fxover
18-02-2018, 12:39 AM
اخي العزيز حسن
كيف نجعل المؤشر يحسب للارقام الكثيره قبل الفاصله
مثال كما في الصوره
kira-h
18-02-2018, 08:18 AM
اخي العزيز حسن
كيف نجعل المؤشر يحسب للارقام الكثيره قبل الفاصله
مثال كما في الصوره
اذا تقصد قيمة النقطة point فلم يسبق لي التعامل بهذه الازواج، لكن يمكنك فعل ذلك بدراسة الزوج ومعرفة قيمته وتقارن هذه القيمة مع القيمة الافتراضية Point وعليه تستنتج شرط البوينت للزوج
fxover
18-02-2018, 12:08 PM
اذا تقصد قيمة النقطة point فلم يسبق لي التعامل بهذه الازواج، لكن يمكنك فعل ذلك بدراسة الزوج ومعرفة قيمته وتقارن هذه القيمة مع القيمة الافتراضية point وعليه تستنتج شرط البوينت للزوج
لا اخي حسن اقصد مثلا هناك مؤشرات لا تعمل على الذهب فيقوم المبرمجون باضافه على الكود لتعمل مثل هذه الازواج
وهي تسمى digits اي يقوم المؤشر اتوماتيكيا بالتكيف مع الارقام قبل الفاصله وبعدها بحيث يعطي نفس النتيجه على كل الازواج والمعادن والنفط