النتائج 376 إلى 390 من 524
الموضوع: تصميم "عظم باكتسر فوري"
- 03-08-2017, 04:17 PM #376
امامك العظم--عدل فيه هنا وامامنا ثم اخبرنا\
كل الدوال ثابتة سوى دالة شروط الدخول--ممكن تحط فيها الف شرط. لاحظ سؤال الاختبار السابق--ثلاث مؤشرات وممكن عشرة وممكن اختراق مقاومة مع ao التي اسميها اضمن الفرص (وضحنا كيف تتم معالجتهما في مواضيع مستقلة)---فالان الاساسيات كلها جاهزة. كلها
اذا لديك خبرة في البرمجة نريد مساهمات فعالة برمجية وليس اقتراحات فقط.
حاليا اي فكرة مهما كان صاحبها يرى صعوبتها يمكن باكتستر فوري
اتمنى فعلا مشاركات فعالة على طريقة شرح الموضوع وليس مثل صور شادي غير الواضحة
إما ان نكتب بإخلاص منقطع النظر او لا نكتب نهائياًآخر تعديل بواسطة فيلسوف البادية ، 03-08-2017 الساعة 04:20 PM
- 03-08-2017, 04:23 PM #377
- 03-08-2017, 04:43 PM #378
- 04-08-2017, 03:13 PM #379
للجميع
من ارسل خاص, لم اقرأ الا اول سطر من محاولتك ثم خرجت, بسبب انك لاتستخم الكومنت بشكل احترافي
لايوجد وقت اتبع اقواسك, لذا وضحها
اي سؤال عن اي كود---اول شيء اطالع فيه الكومنت للاقواس--اذا مكتوبة بشكل احترافي اكملت
اذا لا, تجاهلتها واعتبرت الكود سيئ جدا.
يجب ان يكون الكومنت سلاشين ثم الجملة فوقه مباشرة
- 04-08-2017, 03:53 PM #380
السلام عليكم هذه ملفات البرنامج المثال والشرح على الكود
كود PHP://+------------------------------------------------------------------+
//| التجارة الظاهري |
//| |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
// تحتوي هذه المكتبة على الوظائف التالية:
//Main:
// + VirtualSend
// + VirtualSelect
// + VirtualClose - يلغي الأوامر المعلقة ويغلق المواقف
// + VirtualModify
//Auxiliary:
// + VirtualCopyPosition -- نسخ الموقف في منطقة أخرى من مجموعة
// + VirtualHighTicket -البحث عن اشب تذكرة
// + VirtualFileLoad - تحميل مجموعة من الصفقات من ملف
// + VirtualFileSave - يحفظ صفيف من الصفقات إلى ملف
// + VirtualUpdate - بتحديث المعلومات من السوق
// + VirtualFilter - إنشاء قائمة الفهارس صفيف المواقف التي تم العثور عليها
// + VirtualProfitHistory - بحساب قيمة المتوسط المتحرك للرصيد
// + VirtualProfit - يحسب قيمة الربح من موقف مفتوح في اللحظة الحالية
// + VirtualRating -يحسب تصنيفTS مربحة من حيث النسبة المئوية
// + VirtualExist - وتستخدم هذه الوظيفة لتقييد فتح 2 الصفقات في الخلافة من إشارة واحدة
//+------------------------------------------------------------------+
extern bool RatingON=true; // - تبديل التصنيف (إذا كان تعطيل، الصفقات في الملف يجب أن تتوافق مع التداول الحقيقي)
extern bool FastTest=true; // - لا تقم بإنشاء الملف أثناء الاختبار
#define VIRT_TRADES 1 // - أوامر التجارة والمواقف
#define VIRT_HISTORY 0 // - تاريخ التجارة والمواقف
int Virt_Count; // - عدد المواضع في المصفوفة (من 0 إلى 999)
int Virt_Index; // - VirtualSelect()موقف التجارة المختارة في قاعدة الوظائف
int VirtBufferSize = 16; // - عدد العناصر في سطر واحد من القاعدة (الخطوط التالية)
int Virt_Ticket[1000]; // - عدد الطلبات
datetime Virt_OpenTime[1000]; // - وقت الافتتاح
int Virt_Type[1000]; // - نوع التجارة
double Virt_Lots[1000]; // - حجم
string Virt_Symbol[1000]; // - رمز
double Virt_OpenPrice[1000]; // - سعر الفتح
double Virt_StopLoss[1000];
double Virt_TakeProfit[1000];
datetime Virt_CloseTime[1000]; // - وقت الإغلاق...
double Virt_ClosePrice[1000]; // - سعر الإغلاق
double Virt_Swap[1000]; // - مبادلة
double Virt_Profit[1000]; // - الربح في النقاط
string Virt_Comment[1000]; // - تعليق
int Virt_MagicNumber[1000]; // - عدد السحر
datetime Virt_Expiration[1000]; // -تاريخ إلغاء أمر معلق
int Virt_Status[1000]; // - حالة الاوامر: 1 - فتح موقف /امر معلق؛ 0 - إغلاق موقف / إلغاء امر
int Virt_Filter[1000];
int Virt_Filter_Count;
int Err_Number; // - رقم الخطأ
string Err_Description; // -وصف الأخير
//+------------------------------------------------------------------+
double VirtualRating(int fMagic, string fSymbol, int period, int applied_price, string filename="virtual.csv"){
/* ترجع الدالة تصنيف الصفقات الإيجابية
* التي تم إنشاؤها بواسطة استراتيجية تداول واحدة أو أخرى
* في رمز معين (100ظھ هو الأكثر ربحية تيسي، 0ظھ -الاقل ربحية)
fMagic - عدد السحر، والذي يستخدم لقول نظام التداول واحد من آخر
fSymbol - رمز، يعتبر التقييم ل
period -عدد الصفقات الأخيرة
applied_price - السعر المستخدم: 0 -عملة الإيدا ، 1 -نقاط؛ في
filename - ملف الصفقات*/
if(!RatingON) return(100);
int MagicNum[];
double Profit[];
//double Rating[];
int i, j;
bool MagicExist;
VirtualFileLoad(filename);
if(VirtualFilter(VIRT_HISTORY, -1, -1, fSymbol)<1) return (0);
for(i=0; i<Virt_Filter_Count; i++){
MagicExist=false;
for(j=0; j<ArraySize(MagicNum); j++){
if(MagicNum[j]==Virt_MagicNumber[Virt_Filter[i]]){
MagicExist=true;
break;
}
}//Next j
if(!MagicExist){
ArrayResize(MagicNum, ArraySize(MagicNum)+1);
MagicNum[ArraySize(MagicNum)-1]=Virt_MagicNumber[Virt_Filter[i]];
}
}//Next i
ArrayResize(Profit, ArraySize(MagicNum));
for(i=0; i<ArraySize(MagicNum); i++){
Profit[i]=VirtualProfitHistory(applied_price, period, 0, -1, -1, fSymbol, MagicNum[i], true)+
VirtualProfit( applied_price, -1, -1, fSymbol, MagicNum[i], true);
if(Profit[i]<0) Profit[i]=0;
}//Next i
j=ArrayMaximum(Profit); // 100%
if(Profit[j]==0) return (0);
// ArrayResize(Rating, ArraySize(MagicNum));
for(i=0; i<ArraySize(MagicNum); i++){
if(fMagic==MagicNum[i]){
return(100*Profit[i]/Profit[j]);
}
}//Next i
return(0);
}
//+------------------------------------------------------------------+
double VirtualProfit(int applied_price=1, int fTicket=-1, int fType=-1, string fSymbol="", int fMagic=-1, bool dh = false, string fComment=""){
// ترجع الدالة قيمة ربح المراكز المفتوحة
// apply_price - السعر المستخدم: 0 - في عملة الإيداع، 1 - في نقاط؛
// dh= صحيح - القسمة حسب عدد الأيام لحساب الربح النسبي // معلمات أخرى تتوافق مع تلك الدالةVirtualFilter ()
// ملاحظة: يجب تحميل الملف مع المواضع لاستدعاء هذه الوظيفة.
double Profit, plus, deltaDay;
datetime OldDay = TimeCurrent();
if(VirtualFilter(VIRT_TRADES, fTicket, fType, fSymbol, fMagic, fComment)>0){
for(int i=0; i<Virt_Filter_Count; i++){
if(Virt_Type[Virt_Filter[i]]<2){
if(Virt_OpenTime[Virt_Filter[i]]<OldDay) OldDay=Virt_OpenTime[Virt_Filter[i]];
if(applied_price==0){//في عملة الإيداع
plus=Virt_Profit[Virt_Filter[i]];
}else{//في النقاط
if(Virt_Type[Virt_Filter[i]]==OP_BUY){
plus=(Virt_ClosePrice[Virt_Filter[i]]-Virt_OpenPrice[Virt_Filter[i]])/MarketInfo(Virt_Symbol[Virt_Filter[i]],MODE_POINT);
}else{
plus=(Virt_OpenPrice[Virt_Filter[i]]-Virt_ClosePrice[Virt_Filter[i]])/MarketInfo(Virt_Symbol[Virt_Filter[i]],MODE_POINT);
}
}
Profit=Profit+plus;
}
}//Next i
}
if(dh){
deltaDay=(TimeCurrent()-OldDay)/(24*60*60);
if(deltaDay<1){
deltaDay=1;
}
Profit=Profit/deltaDay;
}
return(Profit);
}
//+------------------------------------------------------------------+
double VirtualProfitHistory(int applied_price=1, int period=0, int shift=0,
int fTicket=-1, int fType=-1, string fSymbol="", int fMagic=-1, bool dh = false, string fComment=""){
// ترجع الدالة قيمة ربح الصفقات المغلقة
//applied_price - السعر المستخدم: 0 - في عملة الإيداع، 1 - في نقاط؛
//period - فترة حساب المتوسط لحساب الربح. إذا كان يساوي 0، ثم لجميع الصفقات.
//shift - مؤشر القيمة التي تم الحصول عليها من صفيف الصفقات (التحول مرة أخرى نسبيا إلى آخر تداول مغلق على العدد المحدد من الصفقات).
//dh = true - القسمة حسب عدد الأيام لحساب الربح النسبي
// the VirtualFilter()معلمات أخرى تتوافق مع تلك الدالة
// ملاحظة: يجب تحميل الملف مع المواضع لاستدعاء هذه الوظيفة.
double Profit, plus, deltaDay;
datetime beginDay=TimeCurrent(), endDay;
int j, k;
if(VirtualFilter(VIRT_HISTORY, fTicket, fType, fSymbol, fMagic, fComment)>0){
for(int i=Virt_Filter_Count-1; i>=0; i--){
if(Virt_Type[Virt_Filter[i]]<2){
k++;
if(k>shift){
j++;
if(j>period && period>0) break;
if(Virt_OpenTime[Virt_Filter[i]]<beginDay) beginDay=Virt_OpenTime[Virt_Filter[i]];
if(Virt_CloseTime[Virt_Filter[i]=]=>endDay) endDay=Virt_CloseTime[Virt_Filter[i]];
if(applied_price==0){//في عملة الإيداع
plus=Virt_Profit[Virt_Filter[i]];
}else{//في النقاط
if(Virt_Type[Virt_Filter[i]]==OP_BUY){
plus=(Virt_ClosePrice[Virt_Filter[i]]-Virt_OpenPrice[Virt_Filter[i]])/MarketInfo(Virt_Symbol[Virt_Filter[i]],MODE_POINT);
}else{
plus=(Virt_OpenPrice[Virt_Filter[i]]-Virt_ClosePrice[Virt_Filter[i]])/MarketInfo(Virt_Symbol[Virt_Filter[i]],MODE_POINT);
}
}
Profit=Profit+plus;
}
}
}//التالى i
}
if(dh){
deltaDay=(endDay-beginDay)/(24*60*60);
//Print(TimeToStr(endDay)+" - "+TimeToStr(beginDay)+" = "+DoubleToStr(deltaDay,2)+" أ¤أ*أ¥é");
if(deltaDay<1){
deltaDay=1;
}
Profit=Profit/deltaDay;
}
return(Profit);
}
//+------------------------------------------------------------------+
bool VirtualSelect(int index, int select, int pool=VIRT_TRADES){
/* وظيفة يختار أمر لمزيد من العمل معها. لعرض ترو إذا تم تنفيذ الدالة بنجاح.
index - موقف أمر أو عدد من النظام اعتمادا على المعلمة الثانية.
select - علم وضع اختيار. يمكن أن يكون أحد القيم التالية:
SELECT_BY_POS -يتم تمرير رقم فهرس الموضع في القائمة في معامل الفهرس،
SELECT_BY_TICKET - يتم تمرير عدد التذاكر في معامل الفهرس.
pool - مصدر البيانات للاختيار. تستخدم عندما تكون المعلمة المحددة مساوية ل SELECT_BY_POS. يمكن أن يكون أحد القيم التالية:
VIRT_TRADES (default) - يتم اختيار الطلب من الأوامر المفتوحة والمعلقة،
VIRT_HISTORY - يتم اختيار الطلب من الأوامر المغلقة والمحذوفة
ملاحظة: يجب تحميل الملف مع المواضع لاستدعاء هذه الوظيفة.*/
if(select==SELECT_BY_POS){
if(VirtualFilter(pool)>0){
if(index<Virt_Filter_Count){
Virt_Index=Virt_Filter[index];
return(true);
}
}
}else{ //select==SELECT_BY_TICKET
if(VirtualFilter(-1,index)>0){
Virt_Index=Virt_Filter[0];
return(true);
}
}
return(false);
}
//+------------------------------------------------------------------+
bool VirtualModify(int ticket, double price, double stoploss, double takeprofit, datetime expiration, string filename="virtual.csv"){
/*تغيير المعلمات من المواقف المفتوحة سابقا والأوامر المعلقة. لعرض ترو إذا تم تنفيذ الدالة بنجاح.
** انتباه!!! لا توجد شيكات لمستوى الحد الأدنى المقبول من "السعر"، SL وTP !!! */
int i;
VirtualFileLoad(filename);
if(VirtualFilter(VIRT_TRADES, ticket)>0){
i=Virt_Filter[0];
if(Virt_Type[i]<2){
if(stoploss>0) Virt_StopLoss[i]=stoploss;
if(takeprofit>0) Virt_TakeProfit[i]=takeprofit;
}else{
if(price>0) Virt_OpenPrice[i]=price;
if(stoploss>0) Virt_StopLoss[i]=stoploss;
if(takeprofit>0) Virt_TakeProfit[i]=takeprofit;
if(expiration>0) Virt_Expiration[i]=expiration;
}
VirtualFileSave(filename);
return(true);
} else {
Err_Number = 102;
Err_Description = "لم يتم العثور على عدد المواقف في محاولة لتغييره";
return(false);
}
}
//+------------------------------------------------------------------+
bool VirtualClose(int ticket, string filename="virtual.csv"){
/* موقع الإقفال. لعرض ترو إذا تم تنفيذ الدالة بنجاح. إرجاع فالس في حالة فشل الدالة في تنفيذ الدالة.
يتم تخزين المعلومات حول الأخطاء في المتغيرات Err*/
int i, j;
VirtualFileLoad(filename);
if(VirtualFilter(VIRT_TRADES, ticket)>0){
i=Virt_Filter[0];
if(Virt_Type[i]==OP_BUY){
Virt_CloseTime[i]=TimeCurrent(); // -وقت الإغلاق
Virt_ClosePrice[i]=MarketInfo(Virt_Symbol[i], MODE_BID); // - سعر الإغلاق
Virt_Swap[i]=MathRound((Virt_CloseTime[i]-Virt_OpenTime[i])/(24*60*60))*MarketInfo(Virt_Symbol[i], MODE_SWAPLONG)*Virt_Lots[i];
Virt_Profit[i]=(Virt_ClosePrice[i]-Virt_OpenPrice[i])*Virt_Lots[i]*MarketInfo(Virt_Symbol[i],MODE_TICKVALUE)/MarketInfo(Virt_Symbol[i], MODE_POINT)+Virt_Swap[i];
}else if(Virt_Type[i]==OP_SELL){
Virt_CloseTime[i]=TimeCurrent(); // - وقت الإغلاق
Virt_ClosePrice[i]=MarketInfo(Virt_Symbol[i], MODE_ASK); // - سعر الإغلاق
Virt_Swap[i]=MathRound((Virt_CloseTime[i]-Virt_OpenTime[i])/(24*60*60))*MarketInfo(Virt_Symbol[i], MODE_SWAPSHORT)*Virt_Lots[i];
Virt_Profit[i]=(Virt_OpenPrice[i]-Virt_ClosePrice[i])*Virt_Lots[i]*MarketInfo(Virt_Symbol[i],MODE_TICKVALUE)/MarketInfo(Virt_Symbol[i], MODE_POINT)+Virt_Swap[i];
}else if(Virt_Type[i]>1 && Virt_Type[i]<6){
Virt_CloseTime[i]=TimeCurrent(); // - وقت الإغلاق
Virt_Comment[i]=Virt_Comment[i]+"[canceled]";
}
for(j=i-1; j>=0; j--){
if(Virt_Status[j]==0) break;
}//التالى j
Virt_Status[i]=0;
if(j<i-1){
j=j+1;
VirtualCopyPosition(j, 999);
VirtualCopyPosition(i, j);
VirtualCopyPosition(999, i);
}
VirtualFileSave(filename);
return(true);
} else {
Err_Number = 101;
Err_Description = "لم يتم العثور على عدد من المواف في محاولة لإغلاقه";
return(false);
}
}
//+------------------------------------------------------------------+
int VirtualFilter(int fStatus=-1, int fTicket=-1, int fType=-1, string fSymbol="", int fMagic=-1, string fComment=""){
/* تقوم الدالة بإنشاء قائمة فهارس صفيف المواضع الموجودة
*** وفقا للمعلمات الموجودة من مرشح.
*** ويعود حجم القائمة
*** ملاحظة: يجب تحميل الملف مع المواضع لاستدعاء هذه الوظيفة */
Virt_Filter_Count=0;
for(int i = 0; i<Virt_Count; i++){
if(fTicket==-1 || Virt_Ticket[i]==fTicket){
if(fType==-1 || Virt_Type[i]==fType){
if(fSymbol=="" || Virt_Symbol[i]==fSymbol) {
if(fComment=="" || StringFind(Virt_Comment[i], fComment)>-1) {
if(fMagic==-1 || Virt_MagicNumber[i]==fMagic) {
if(fStatus==-1 || Virt_Status[i]==fStatus) {
Virt_Filter[Virt_Filter_Count]=i;
Virt_Filter_Count++;
}
}
}
}
}
}
}//التالى i
return(Virt_Filter_Count);
}
//+------------------------------------------------------------------+
void VirtualUpdate(string filename="virtual.csv"){
/* إجراء تحديث ملف الصفقات وفقا لتغيرات السوق.
*** يتم تنفيذ الإجراءات التالية هنا:
*** + شحن المقايضات.
*** + الإغلاق الظاهري من الصفقات من قبل مجموعة أولية ستوبلوس و تاكيبروفيت
*** + تحديث سعر إغلاق المراكز المفتوحة، حساب الربح.
*** + فتح أوامر المعلقة؛
*** + انتهاء صلاحية الأوامر المعلقة التي لم يتم تشغيلها؛*/
bool is_changed, is_closed;
int i, j;
VirtualFileLoad(filename);
for(i=Virt_Count-1; i>=0; i--){
is_closed=false;
if(Virt_Status[i]==1) {
is_changed=true;
switch(Virt_Type[i]){
case OP_BUY:
Virt_CloseTime[i]=TimeCurrent(); // - وقت الإغلاق
Virt_ClosePrice[i]=MarketInfo(Virt_Symbol[i], MODE_BID); // - سعر الإغلاق
Virt_Swap[i]=MathRound((Virt_CloseTime[i]-Virt_OpenTime[i])/(24*60*60))*MarketInfo(Virt_Symbol[i], MODE_SWAPLONG)*Virt_Lots[i];
Virt_Profit[i]=(Virt_ClosePrice[i]-Virt_OpenPrice[i])*Virt_Lots[i]*MarketInfo(Virt_Symbol[i],MODE_TICKVALUE)/MarketInfo(Virt_Symbol[i], MODE_POINT)+Virt_Swap[i];
if(Virt_TakeProfit[i]>0){
if(MarketInfo(Virt_Symbol[i], MODE_BID)>=Virt_TakeProfit[i]){
Virt_ClosePrice[i]=Virt_TakeProfit[i]; // - سعر الإغلاق
Virt_Profit[i]=(Virt_ClosePrice[i]-Virt_OpenPrice[i])*Virt_Lots[i]*MarketInfo(Virt_Symbol[i],MODE_TICKVALUE)/MarketInfo(Virt_Symbol[i], MODE_POINT)+Virt_Swap[i];
Virt_Comment[i]=Virt_Comment[i]+"[tp]";
is_closed=true;
}
}//نهاية جني الأرباح
if(Virt_StopLoss[i]>0){
if(MarketInfo(Virt_Symbol[i], MODE_BID)<=Virt_StopLoss[i]){
Virt_ClosePrice[i]=Virt_StopLoss[i]; // - سعر الإغلاق
Virt_Profit[i]=(Virt_ClosePrice[i]-Virt_OpenPrice[i])*Virt_Lots[i]*MarketInfo(Virt_Symbol[i],MODE_TICKVALUE)/MarketInfo(Virt_Symbol[i], MODE_POINT)+Virt_Swap[i];
Virt_Comment[i]=Virt_Comment[i]+"[sl]";
is_closed=true;
}
}//نهاية وقف الخسارة
break;
case OP_SELL:
Virt_CloseTime[i]=TimeCurrent(); // - وقت الإغلاق
Virt_ClosePrice[i]=MarketInfo(Virt_Symbol[i], MODE_ASK); // - سعر الإغلاق
Virt_Swap[i]=MathRound((Virt_CloseTime[i]-Virt_OpenTime[i])/(24*60*60))*MarketInfo(Virt_Symbol[i], MODE_SWAPSHORT)*Virt_Lots[i];
Virt_Profit[i]=(Virt_OpenPrice[i]-Virt_ClosePrice[i])*Virt_Lots[i]*MarketInfo(Virt_Symbol[i],MODE_TICKVALUE)/MarketInfo(Virt_Symbol[i], MODE_POINT)+Virt_Swap[i];
if(Virt_TakeProfit[i]>0){
if(MarketInfo(Virt_Symbol[i], MODE_ASK)<=Virt_TakeProfit[i]){
Virt_ClosePrice[i]=Virt_TakeProfit[i]; // - سعر الإغلاق
Virt_Profit[i]=(Virt_OpenPrice[i]-Virt_ClosePrice[i])*Virt_Lots[i]*MarketInfo(Virt_Symbol[i],MODE_TICKVALUE)/MarketInfo(Virt_Symbol[i], MODE_POINT)+Virt_Swap[i];
Virt_Comment[i]=Virt_Comment[i]+"[tp]";
is_closed=true;
}
}//نهاية جني الأرباح
if(Virt_StopLoss[i]>0){
if(MarketInfo(Virt_Symbol[i], MODE_ASK)>=Virt_StopLoss[i]){
Virt_ClosePrice[i]=Virt_StopLoss[i]; // - سعر الإغلاق
Virt_Profit[i]=(Virt_OpenPrice[i]-Virt_ClosePrice[i])*Virt_Lots[i]*MarketInfo(Virt_Symbol[i],MODE_TICKVALUE)/MarketInfo(Virt_Symbol[i], MODE_POINT)+Virt_Swap[i];
Virt_Comment[i]=Virt_Comment[i]+"[sl]";
is_closed=true;
}
}//نهاية وقف الخسارة
break;
case OP_BUYLIMIT:
if(MarketInfo(Virt_Symbol[i], MODE_ASK)<=Virt_OpenPrice[i]){
Virt_Type[i]=OP_BUY;
}
break;
case OP_SELLLIMIT:
if(MarketInfo(Virt_Symbol[i], MODE_BID)>=Virt_OpenPrice[i]){
Virt_Type[i]=OP_SELL;
}
break;
case OP_BUYSTOP:
if(MarketInfo(Virt_Symbol[i], MODE_ASK)>=Virt_OpenPrice[i]){
Virt_Type[i]=OP_BUY;
}
break;
case OP_SELLSTOP:
if(MarketInfo(Virt_Symbol[i], MODE_BID)<=Virt_OpenPrice[i]){
Virt_Type[i]=OP_SELL;
}
break;
}//نهاية التبديل
if(Virt_Type[i]>1 && Virt_Type[i]<6) {
if(Virt_Expiration[i]>0) {
if(TimeCurrent()>Virt_Expiration[i]) {
Virt_Comment[i]=Virt_Comment[i]+"[expiration]";
is_closed=true;
}
}
}
if(is_closed){
for(j=i; j>=0; j--){
if(Virt_Status[j]==0) break;
}//التالى j
Virt_Status[i]=0;
if(j<i-1){
j=j+1;
VirtualCopyPosition(j, 999);
VirtualCopyPosition(i, j);
VirtualCopyPosition(999, i);
}
}//إنهاء إذا (مغلق)
} else {
break;
}//(Virt.Status[i]==1)انهاء اذا
}//التالى i
if(is_changed) VirtualFileSave(filename);
}
//+------------------------------------------------------------------+
void VirtualCopyPosition(int FirstPosition, int SecondPosition){
// إجراء نسخ الموضع إلى خلية أخرى من المصفوفة
Virt_Ticket[SecondPosition]=Virt_Ticket[FirstPosition]; // - عدد الطلبات
Virt_OpenTime[SecondPosition]=Virt_OpenTime[FirstPosition]; // - Time of opening
Virt_Type[SecondPosition]=Virt_Type[FirstPosition]; // - وقت الافتتاح
Virt_Lots[SecondPosition]=Virt_Lots[FirstPosition]; // -حجم
Virt_Symbol[SecondPosition]=Virt_Symbol[FirstPosition]; // -رمز
Virt_OpenPrice[SecondPosition]=Virt_OpenPrice[FirstPosition]; // - سعر الافتتاح
Virt_StopLoss[SecondPosition]=Virt_StopLoss[FirstPosition];
Virt_TakeProfit[SecondPosition]=Virt_TakeProfit[FirstPosition];
Virt_CloseTime[SecondPosition]=Virt_CloseTime[FirstPosition]; // - وقت الإغلاق
Virt_ClosePrice[SecondPosition]=Virt_ClosePrice[FirstPosition]; // - سعر الإغلاق
Virt_Swap[SecondPosition]=Virt_Swap[FirstPosition]; // - مبادلة
Virt_Profit[SecondPosition]=Virt_Profit[FirstPosition]; // - الربح في النقاط
Virt_Comment[SecondPosition]=Virt_Comment[FirstPosition]; // - تعليقات
Virt_MagicNumber[SecondPosition]=Virt_MagicNumber[FirstPosition]; // -عدد السحر
Virt_Expiration[SecondPosition]=Virt_Expiration[FirstPosition]; // - تاريخ إلغاء أمر معلق
Virt_Status[SecondPosition]=Virt_Status[FirstPosition]; // - حالة المواقف : 1 - فتح موقف / أمر معلق؛ 0 -غلق موقف / أمر معلق
}
//+------------------------------------------------------------------+
int VirtualSend(string symbol, int cmd, double volume, double price,
int slippage, double stoploss, double takeprofit, string comment="",
int magic=0, datetime expiration=0, string filename="virtual.csv") {
/* الوظيفة الرئيسية التي يتم استخدامها لفتح المراكز ووضع الأوامر المعلقة.
***إرجاع رقم التذكرة، الذي تم تعيينه إلى النظام من قبل خادم التجارة، أو -1 في حالة الفشل.
***
***المعلمات:
symbol - اسم الأداة المالية يتم تنفيذ عملية تجارية من قبل.
cmd - العملية التجارية. يمكن أن يكون أي قيمة من العمليات التجارية.
volume - عدد من القطع.
price - سعر الافتتاح..
slippage - الحد الأقصى الانحراف المقبول من السعر في نقاط لأوامر السوق (شراء أو بيع أوامر).
stoploss - سعر المركز الختامي عند الوصول إلى مستوى غير ربحي (0 إذا لم يكن هناك مثل هذا المستوى).
takeprofit - سعر إغلاق الصفقة عند الوصول إلى مستوى الربحية (0 إذا لم يكن هناك مثل هذا المستوى).
comment - نص التعليق على النظام. يمكن تغيير الجزء الأخير من التعليق من قبل خادم التجارة.
magic - عدد ماجيك من النظام. يمكن استخدامه كمعرف يحدده المستخدم.
expiration - وقت انتهاء الصلاحية من أجل معلق.
filename - اسم ملف الصفقات الافتراضية من الدليل TerminalPath()+"\experts\files" */
//---------------------------------------------
//كتلة التحقق:
if(cmd==OP_BUY){
//يجب أن يكون سعر فتح الشراء بالقرب أسك + - الانزلاق
if((price>MarketInfo(symbol,MODE_ASK)+slippage*MarketInfo(symbol,MODE_POINT))||
(price<MarketInfo(symbol,MODE_ASK)-slippage*MarketInfo(symbol,MODE_POINT))){
Err_Number = 1;
Err_Description = "سعر فتح الموقف بعيد جدا عن السوق";
return(-1);
}
}else if(cmd==OP_SELL){
if((price>MarketInfo(symbol,MODE_BID)+slippage*MarketInfo(symbol,MODE_POINT))||
(price<MarketInfo(symbol,MODE_BID)-slippage*MarketInfo(symbol,MODE_POINT))){
Err_Number = 1;
Err_Description = "سعر فتح الموقف بعيد جدا عن السوق";
return(-1);
}
}else if(cmd==OP_BUYSTOP){
if(price<=MarketInfo(symbol,MODE_ASK)+MarketInfo(symbol,MODE_STOPLEVEL)*MarketInfo(symbol,MODE_POINT)){
Err_Number = 2;
Err_Description = "سعر فتح أمر معلق قريب جدا من السوق";
return(-1);
}
}else if(cmd==OP_SELLSTOP){
if(price>=MarketInfo(symbol,MODE_BID)-MarketInfo(symbol,MODE_STOPLEVEL)*MarketInfo(symbol,MODE_POINT)){
Err_Number = 2;
Err_Description = "سعر فتح أمر معلق قريب جدا من السوق";
return(-1);
}
}else if(cmd==OP_BUYLIMIT){
if(price>=MarketInfo(symbol,MODE_ASK)-MarketInfo(symbol,MODE_STOPLEVEL)*MarketInfo(symbol,MODE_POINT)){
Err_Number = 2;
Err_Description = "سعر فتح أمر معلق قريب جدا من السوق";
return(-1);
}
}else if(cmd==OP_SELLLIMIT){
if(price<=MarketInfo(symbol,MODE_BID)+MarketInfo(symbol,MODE_STOPLEVEL)*MarketInfo(symbol,MODE_POINT)){
Err_Number = 2;
Err_Description = "سعر فتح أمر معلق قريب جدا من السوق";
return(-1);
}
}
if(stoploss!=0.0){
if((cmd==OP_BUY) || (cmd==OP_BUYSTOP) || (cmd==OP_BUYLIMIT)){// Buy
if(price-stoploss<=MarketInfo(symbol,MODE_STOPLEVEL)*MarketInfo(symbol,MODE_POINT)){
Err_Number = 3;
Err_Description = "ستوبلوس أو مستوى تاكيبروفيت قريب جدا من السعر";
return(-1);
}
}else if((cmd==OP_SELL) || (cmd==OP_SELLSTOP) || (cmd==OP_SELLLIMIT)){// Sell
if(stoploss-price<=MarketInfo(symbol,MODE_STOPLEVEL)*MarketInfo(symbol,MODE_POINT)){
Err_Number = 3;
Err_Description = "ستوبلوس أو مستوى تاكيبروفيت قريب جدا من السعر";
return(-1);
}
}
}
if(takeprofit!=0.0){
if((cmd==OP_BUY) || (cmd==OP_BUYSTOP) || (cmd==OP_BUYLIMIT)){// Buy
if(takeprofit-price<=MarketInfo(symbol,MODE_STOPLEVEL)*MarketInfo(symbol,MODE_POINT)){
Err_Number = 3;
Err_Description = "ستوبلوس أو مستوى تاكيبروفيت قريب جدا من السعر";
return(-1);
}
}else if((cmd==OP_SELL) || (cmd==OP_SELLSTOP) || (cmd==OP_SELLLIMIT)){// Sell
if(price-takeprofit<=MarketInfo(symbol,MODE_STOPLEVEL)*MarketInfo(symbol,MODE_POINT)){
Err_Number = 3;
Err_Description = "ستوبلوس أو مستوى تاكيبروفيت قريب جدا من السعر";
return(-1);
}
}
}
if((volume<MarketInfo(symbol, MODE_MINLOT))||
(volume>MarketInfo(symbol, MODE_MAXLOT))){
Err_Number = 4;
Err_Description = "حجم غير صحيح";
return(-1);
}
if(expiration<=TimeCurrent() && expiration!=0){
Err_Number = 5;
Err_Description = "تاريخ انتهاء الصلاحية غير صحيح";
return(-1);
}
//---------------------------------------------
// الحماية من تجاوز الصفيف
int i, j, k;
VirtualFileLoad(filename);
if(Virt_Count>998){
//حذف جميع الأوامر المعلقة الملغاة
for(i=0; i<Virt_Count; i++){
if((Virt_Type[i]>1) && (Virt_Status[i]==0)) {
//يتم نقل جميع الصفقات الموجودة أسفل هذا الطلب المعلق إلى مستوى واحد:
for(j=i; j<Virt_Count-1; j++) {
Virt_Ticket[j] = Virt_Ticket[j+1];
Virt_OpenTime[j] = Virt_OpenTime[j+1];
Virt_Type[j] = Virt_Type[j+1];
Virt_Lots[j] = Virt_Lots[j+1];
Virt_Symbol[j] = Virt_Symbol[j+1];
Virt_OpenPrice[j] = Virt_OpenPrice[j+1];
Virt_StopLoss[j] = Virt_StopLoss[j+1];
Virt_TakeProfit[j] = Virt_TakeProfit[j+1];
Virt_CloseTime[j] = Virt_CloseTime[j+1];
Virt_ClosePrice[j] = Virt_ClosePrice[j+1];
Virt_Swap[j] = Virt_Swap[j+1];
Virt_Profit[j] = Virt_Profit[j+1];
Virt_Comment[j] = Virt_Comment[j+1];
Virt_MagicNumber[j] = Virt_MagicNumber[j+1];
Virt_Expiration[j] = Virt_Expiration[j+1];
Virt_Status[j] = Virt_Status[j+1];
}//التالى j
Virt_Count--;
}
}//التالى i
//لبحث عن أول تداول مغلق
for(i=0; i<Virt_Count; i++){
if((Virt_Type[i]<2) && (Virt_Status[i]==0)) {
break;
}
}//التالى i
if(i==Virt_Count){
Err_Number = 402;
Err_Description = "عدد الصفقات المفتوحة تجاوز الحد الأقصى المسموح به للمستوى! يجب إعادة صياغة نظام التداول.";
return(-1);
}else{
// البحث عن الصفقة المغلقة الثانية
for(j=i+1; j<Virt_Count; j++) {
if(Virt_Status[j]==0) {
break;
}
}//التالى j
if(j==Virt_Count){
Err_Number = 402;
Err_Description = "عدد الصفقات المفتوحة تجاوز الحد الأقصى المسموح به للمستوى! يجب إعادة صياغة نظام التداول.";
return(-1);
}else{
//إحضار نتيجة تداولين (1-st and 2-nd) في أول تداول مغلق:
Virt_Ticket[i] = Virt_Ticket[j];
Virt_OpenTime[i] = Virt_OpenTime[j];
Virt_Type[i] = -1;
Virt_Lots[i] = Virt_Lots[i]+Virt_Lots[j];
Virt_Symbol[i] = "";
Virt_OpenPrice[i] = 0;
Virt_StopLoss[i] = 0;
Virt_TakeProfit[i] = 0;
Virt_CloseTime[i] = Virt_CloseTime[j];
Virt_ClosePrice[i] = 0;
Virt_Swap[i] = Virt_Swap[i]+Virt_Swap[j];
Virt_Profit[i] = Virt_Profit[i]+Virt_Profit[j];
Virt_Comment[i] = "Archive";
Virt_MagicNumber[i] = Virt_MagicNumber[j];
Virt_Expiration[i] = Virt_Expiration[j];
//وتنتقل جميع الصفقات الموجودة تحت التجارة المغلقة الثانية إلى مستوى أعلى:
for(k=j; k<Virt_Count-1; k++) {
Virt_Ticket[k] = Virt_Ticket[k+1];
Virt_OpenTime[k] = Virt_OpenTime[k+1];
Virt_Type[k] = Virt_Type[k+1];
Virt_Lots[k] = Virt_Lots[k+1];
Virt_Symbol[k] = Virt_Symbol[k+1];
Virt_OpenPrice[k] = Virt_OpenPrice[k+1];
Virt_StopLoss[k] = Virt_StopLoss[k+1];
Virt_TakeProfit[k] = Virt_TakeProfit[k+1];
Virt_CloseTime[k] = Virt_CloseTime[k+1];
Virt_ClosePrice[k] = Virt_ClosePrice[k+1];
Virt_Swap[k] = Virt_Swap[k+1];
Virt_Profit[k] = Virt_Profit[k+1];
Virt_Comment[k] = Virt_Comment[k+1];
Virt_MagicNumber[k] = Virt_MagicNumber[k+1];
Virt_Expiration[k] = Virt_Expiration[k+1];
Virt_Status[k] = Virt_Status[k+1];
}//Next k
Virt_Count--;
}
}
}
//---------------------------------------------
//إضافة موضع جديد إلى المصفوفة
Virt_Count++;
Virt_Ticket[Virt_Count-1] = VirtualHighTicket()+1;
Virt_OpenTime[Virt_Count-1] = TimeCurrent();
Virt_Type[Virt_Count-1] = cmd;
Virt_Lots[Virt_Count-1] = volume;
Virt_Symbol[Virt_Count-1] = symbol;
Virt_OpenPrice[Virt_Count-1] = price;
Virt_StopLoss[Virt_Count-1] = stoploss;
Virt_TakeProfit[Virt_Count-1] = takeprofit;
Virt_Comment[Virt_Count-1] = comment;
Virt_MagicNumber[Virt_Count-1] = magic;
Virt_Expiration[Virt_Count-1] = expiration;
Virt_Status[Virt_Count-1] = 1;
//---------------------------------------------
//حفظ التغييرات
VirtualFileSave(filename);
return(Virt_Ticket[Virt_Count-1]);
}
//+------------------------------------------------------------------+
int VirtualHighTicket(){
//البحث عن احدث تذكرة
int i, j;
for(i=0; i<Virt_Count; i++){
if(Virt_Ticket[i]>j){
j=Virt_Ticket[i];
}
}//التالى i
return(j);
}
//+------------------------------------------------------------------+
int VirtualFileLoad(string file) {
//وظيفة تبحث في التداول من الملف إلى صفيف من الصفقات
//ويعود عدد الخطوط المحملة.
if(FastTest){
if(IsTesting()) return(0);
}
int k, Count;
string buffer[];
ArrayResize(buffer,VirtBufferSize*1000);
int handle=FileOpen(file,FILE_CSV|FILE_READ,';');
if(handle<1) {
Err_Number = 401;
Err_Description = "لم يتم العثور على ملف الصفقات";
return(-1);
} else {
Count=0;
// قراءة الملف
while(!FileIsEnding(handle)){
buffer[Count]=FileReadString(handle);
Count++;
}
Count--;
FileClose(handle);
//املأ الصفيف
Virt_Count=0;
k=VirtBufferSize;
//Print("Loaded ",Count/VirtBufferSize-1," lines");
while(Virt_Count<Count/VirtBufferSize-1) {
Virt_Ticket[Virt_Count]= StrToInteger(buffer[k]); // - عدد من الاوامر
Virt_OpenTime[Virt_Count] = StrToTime(buffer[k+1]); // - وقت الافتتاح
Virt_Type[Virt_Count] = StrToInteger(buffer[k+2]); // - نوع التجارة
Virt_Lots[Virt_Count] = StrToDouble(buffer[k+3]); // - حجم
Virt_Symbol[Virt_Count] = buffer[k+4]; // - رمز
Virt_OpenPrice[Virt_Count] = StrToDouble(buffer[k+5]); // - سعر الافتتاح
Virt_StopLoss[Virt_Count] = StrToDouble(buffer[k+6]);
Virt_TakeProfit[Virt_Count] = StrToDouble(buffer[k+7]);
Virt_CloseTime[Virt_Count] = StrToTime(buffer[k+8]); // - وقت الإغلاق
Virt_ClosePrice[Virt_Count] = StrToDouble(buffer[k+9]); // - سعر الإغلاق
Virt_Swap[Virt_Count] = StrToDouble(buffer[k+10]); // - مبادلة
Virt_Profit[Virt_Count] = StrToDouble(buffer[k+11]); // - الربح في النقاط
Virt_Comment[Virt_Count] = buffer[k+12]; // - تعليقات
Virt_MagicNumber[Virt_Count] = StrToInteger(buffer[k+13]);//- عدد السحر
Virt_Expiration[Virt_Count] = StrToTime(buffer[k+14]); // -تاريخ إلغاء أمر معلق
Virt_Status[Virt_Count] = StrToInteger(buffer[k+15]); // - حالة المواقف : 1 - فتح موقف / أمر معلق؛ 0 -غلق موقف / أمر معلق
k=k+VirtBufferSize;
Virt_Count++;
}
return(Virt_Count);
}
}
//+------------------------------------------------------------------+
void VirtualFileSave(string file) {
//إجراء حفظ صفيف من الصفقات إلى ملف محدد.
if(FastTest){
if(IsTesting()) return;
}
int Count=0;
int handle=FileOpen(file,FILE_CSV|FILE_WRITE,';');
FileWrite(handle, "Order name","Open time","Type","Volume","Symbol","Open price","S/L","T/P",
"Close time","Close price","Swap","Profit","Comment","Magic number","Expiration","State");
//Saving to the file
while(Count<Virt_Count) {
//احتمال التحول من البيانات أمر ضروري
FileWrite(handle,
Virt_Ticket[Count],
TimeToStr(Virt_OpenTime[Count]),
Virt_Type[Count],
Virt_Lots[Count],
Virt_Symbol[Count],
Virt_OpenPrice[Count],
Virt_StopLoss[Count],
Virt_TakeProfit[Count],
TimeToStr(Virt_CloseTime[Count]),
Virt_ClosePrice[Count],
Virt_Swap[Count],
Virt_Profit[Count],
Virt_Comment[Count],
Virt_MagicNumber[Count],
TimeToStr(Virt_Expiration[Count]),
Virt_Status[Count]
);
Count++;
}
FileClose(handle);
Print("Written ",Count," lines");
}
//+------------------------------------------------------------------+
bool VirtualExist(datetime TimeOpenCandle, int fMagic=0){
VirtualFilter(VIRT_TRADES, -1, -1, Symbol(), fMagic);
for(int i=0; i<Virt_Filter_Count; i++){
if(Virt_OpenTime[Virt_Filter[i]=]=>=TimeOpenCandle){
return(true);
}
}//التالى i
return(false);
}
//+------------------------------------------------------------------+
آخر تعديل بواسطة 2013Lemsantah ، 04-08-2017 الساعة 04:04 PM
- 04-08-2017, 03:59 PM #381كود PHP:
// لا ينصح بتغيير الإطار الزمني بعد إرفاق إي لرسم بياني!
// من المقبول إضافة الرمز إلى أنظمة التداول الأخرى القادرة على العمل
// استقرت في نفس الإطار الزمني كما استراتيجيات أخرى.
#include <virtualTrade.mqh>
#include <RealTrade.mqh>
//+------------------------------------------------------------------+
extern string file="virtual.csv"; // - ملف التداول الظاهري
extern int MinRating=50; // - الحد الأدنى من التصنيف (من حيث النسبة المئوية) لفتح موقف حقيقي
extern string _tmp1_="---- Trading system 1 ----";//النظام 1
extern int T1_Enabled = 1; //1 - تمكين؛ 0 - تعطيل....
extern int T1_Magic = 101; //عدد السحر
extern double T1_lot = 0.1; // قيمة الحجم الثابت
extern int T1_Fast = 10; // فترة سريعة ÌÀ
extern int T1_Slow =100; //فترة بطيئة ÌÀ
extern int T1_TS = 70; // توقف زائدة
extern int T1_PeriodRating=20; // - فترة حساب المتوسط من التصنيف
extern string _tmp2_="---- Trading system 2 ----";
extern int T2_Enabled = 1; //1 - تمكين؛ 0 - تعطيل....
extern int T2_Magic = 102; // عدد السحر
extern double T2_lot = 0.1; // قيمة الحجم الثابت
extern int T2_PeriodCCI=30;
extern int T2_LevelCCI=200;
extern int T2_SL=50; // إيقاف الخسارة
extern int T2_PeriodRating=10; // - فترة حساب المتوسط من التصنيف
extern string _tmp3_="---- Trading system 3 ----";
extern int T3_Enabled = 1; //1 - تمكين؛ 0 - تعطيل....
extern int T3_Magic = 103; // عدد السحر
extern double T3_lot = 0.1; //قيمة الحجم الثابت
extern int T3_Fast = 30; // فترة سريعة ÌÀ
extern int T3_Slow =200; // فترة بطيئة ÌÀ
extern int T3_TS = 50; // توقف زائدة
extern int T3_PeriodRating=2; // -فترة حساب المتوسط من التصنيف
extern string _tmp4_="---- Trading system 4 ----";
extern int T4_Enabled = 1; //1 - تمكين؛ 0 - تعطيل....
extern int T4_Magic = 104; //عدد السحر
extern double T4_lot = 0.1; // قيمة الحجم الثابت
extern double T4_SL = 50;
extern double T4_TS = 50;
extern double T4_LimitMACD = 0.002;
extern int T4_PeriodRating=20; // - فترة حساب المتوسط من التصنيف
extern string _tmp5_="---- Trading system 5 ----";
extern int T5_Enabled = 1; // 1 - تمكين؛ 0 - تعطيل....
extern int T5_Magic = 105; //عدد السحر
extern double T5_lot = 0.1; //قيمة الحجم الثابت
extern int T5_PeriodCCI=90;
extern int T5_LevelCCI=100;
extern int T5_TralingCCI=100;
extern int T5_SL=50;
extern int T5_TS1=50; //لمرة واحدة وقف زائدة (خطوة وقف الخسارة إلى مستوى التعادل)
extern int T5_PeriodRating=10; // - فترة حساب المتوسط من التصنيف
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if(Digits==5 || Digits==3)Q=10;
else Q=1;
if(Digits<4)
{
point=0.01;
digits=2;
}
else
{
point=0.0001;
digits=4;
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
FastTest=false;
VirtualFileSave(file);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
VirtualUpdate(file);
Closings();
Accompaniment();
Openings();
}
//+------------------------------------------------------------------+
//| Expert Closings function |
//+------------------------------------------------------------------+
void Closings(){
//إجراء إغلاق موضع بإشارة
int i, j;
double PriceClose;
int myFilter[];
//----------------------------------- النظام 1
if(!(IsTesting() && T1_Enabled!=1)){
j=OrdersTotal();
for(i=0; i<j; i++){
if(OrderSelect(i,SELECT_BY_POS)){
if(OrderMagicNumber()==T1_Magic){
if(T1_SignalClose(OrderType())){
if(OrderType()==OP_BUY){
PriceClose=MarketInfo(Symbol(),MODE_BID);
}else if(OrderType()==OP_SELL){
PriceClose=MarketInfo(Symbol(),MODE_ASK);
}
if(!Block())bool close4 = OrderClose(OrderTicket(), OrderLots(), PriceClose, Slippage*Q);
}
}
}
}//التالى i
VirtualFileLoad(file);
VirtualFilter(VIRT_TRADES, -1, -1, Symbol(), T1_Magic);
ArrayResize(myFilter, Virt_Filter_Count);
for(i=0; i<Virt_Filter_Count; i++){
myFilter[i]=Virt_Filter[i];
}//Next i
for(i=0; i<ArraySize(myFilter); i++){
if(T1_SignalClose(Virt_Type[myFilter[i]])){
VirtualClose(Virt_Ticket[myFilter[i]], file);
}
}//التالى i
}
//----------------------------------- النظام 2
if(!(IsTesting() && T2_Enabled!=1)){
j=OrdersTotal();
for(i=0; i<j; i++){
if(OrderSelect(i,SELECT_BY_POS)){
if(OrderMagicNumber()==T2_Magic){
if(T2_SignalClose(OrderType())){
if(OrderType()==OP_BUY){
PriceClose=MarketInfo(Symbol(),MODE_BID);
}else if(OrderType()==OP_SELL){
PriceClose=MarketInfo(Symbol(),MODE_ASK);
}
if(!Block())bool close3 = OrderClose(OrderTicket(), OrderLots(), PriceClose, Slippage*Q);
}
}
}
}//التالى i
VirtualFileLoad(file);
VirtualFilter(VIRT_TRADES, -1, -1, Symbol(), T2_Magic);
ArrayResize(myFilter, Virt_Filter_Count);
for(i=0; i<Virt_Filter_Count; i++){
myFilter[i]=Virt_Filter[i];
}//Next i
for(i=0; i<ArraySize(myFilter); i++){
if(T2_SignalClose(Virt_Type[myFilter[i]])){
VirtualClose(Virt_Ticket[myFilter[i]], file);
}
}//التالى i
}
//-----------------------------------النظام 3
if(!(IsTesting() && T3_Enabled!=1)){
j=OrdersTotal();
for(i=0; i<j; i++){
if(OrderSelect(i,SELECT_BY_POS)){
if(OrderMagicNumber()==T3_Magic){
if(T3_SignalClose(OrderType())){
if(OrderType()==OP_BUY){
PriceClose=MarketInfo(Symbol(),MODE_BID);
}else if(OrderType()==OP_SELL){
PriceClose=MarketInfo(Symbol(),MODE_ASK);
}
if(!Block())bool close2 = OrderClose(OrderTicket(), OrderLots(), PriceClose, Slippage*Q);
}
}
}
}//التالى i
VirtualFileLoad(file);
VirtualFilter(VIRT_TRADES, -1, -1, Symbol(), T3_Magic);
ArrayResize(myFilter, Virt_Filter_Count);
for(i=0; i<Virt_Filter_Count; i++){
myFilter[i]=Virt_Filter[i];
}//Next i
for(i=0; i<ArraySize(myFilter); i++){
if(T3_SignalClose(Virt_Type[myFilter[i]])){
VirtualClose(Virt_Ticket[myFilter[i]], file);
}
}//التالى i
}
//----------------------------------- النظام 4
if(!(IsTesting() && T4_Enabled!=1)){
j=OrdersTotal();
for(i=0; i<j; i++){
if(OrderSelect(i,SELECT_BY_POS)){
if(OrderMagicNumber()==T4_Magic){
if(T4_SignalClose(OrderType())){
if(OrderType()==OP_BUY){
PriceClose=MarketInfo(Symbol(),MODE_BID);
}else if(OrderType()==OP_SELL){
PriceClose=MarketInfo(Symbol(),MODE_ASK);
}
if(!Block()) bool close =OrderClose(OrderTicket(), OrderLots(), PriceClose, Slippage*Q);
}
}
}
}//Next i
VirtualFileLoad(file);
VirtualFilter(VIRT_TRADES, -1, -1, Symbol(), T4_Magic);
ArrayResize(myFilter, Virt_Filter_Count);
for(i=0; i<Virt_Filter_Count; i++){
myFilter[i]=Virt_Filter[i];
}//Next i
for(i=0; i<ArraySize(myFilter); i++){
if(T4_SignalClose(Virt_Type[myFilter[i]])){
VirtualClose(Virt_Ticket[myFilter[i]], file);
}
}//التالى i
}
//----------------------------------- النظام 5
if(!(IsTesting() && T5_Enabled!=1)){
j=OrdersTotal();
for(i=0; i<j; i++){
if(OrderSelect(i,SELECT_BY_POS)){
if(OrderMagicNumber()==T5_Magic){
if(T5_SignalClose(OrderType())){
if(OrderType()==OP_BUY){
PriceClose=MarketInfo(Symbol(),MODE_BID);
}else if(OrderType()==OP_SELL){
PriceClose=MarketInfo(Symbol(),MODE_ASK);
}
if(!Block())bool close1 = OrderClose(OrderTicket(), OrderLots(), PriceClose, Slippage*Q);
}
}
}
}//التالى i
VirtualFileLoad(file);
VirtualFilter(VIRT_TRADES, -1, -1, Symbol(), T5_Magic);
ArrayResize(myFilter, Virt_Filter_Count);
for(i=0; i<Virt_Filter_Count; i++){
myFilter[i]=Virt_Filter[i];
}//Next i
for(i=0; i<ArraySize(myFilter); i++){
if(T5_SignalClose(Virt_Type[myFilter[i]])){
VirtualClose(Virt_Ticket[myFilter[i]], file);
}
}//التالى i
}
}
//+------------------------------------------------------------------+
//| Expert Accompaniment function |
//+------------------------------------------------------------------+
void Accompaniment(){
//إجراءات زائدة المراكز المفتوحة
int myFilter[];
if(!IsTesting() || T1_Enabled==1){ //--- زائدة لنظام التداول 1 ---
int j=OrdersTotal();
for(int i=0; i<j; i++){
if(OrderSelect(i,SELECT_BY_POS)){
if(OrderMagicNumber()==T1_Magic){
if(OrderType()==OP_BUY){
if((Bid-OrderOpenPrice())/point>T1_TS){
if(OrderStopLoss()==0 || (Bid-OrderStopLoss())/point>T1_TS){
Modify(OrderTicket(), Bid-T1_TS*point);
}
}
}else if(OrderType()==OP_SELL){
if((OrderOpenPrice()-Ask)/point>T1_TS){
if(OrderStopLoss()==0 || (OrderStopLoss()-Ask)/point>T1_TS){
Modify(OrderTicket(), Ask+T1_TS*point);
}
}
}
}
}
}//التالى i
VirtualFileLoad(file);
VirtualFilter(VIRT_TRADES, -1, -1, Symbol(), T1_Magic);
ArrayResize(myFilter, Virt_Filter_Count);
for(i=0; i<Virt_Filter_Count; i++){
myFilter[i]=Virt_Filter[i];
}//التالى i
for(i=0; i<ArraySize(myFilter); i++){
if(Virt_Type[myFilter[i]]==OP_BUY){
if((Bid-Virt_OpenPrice[myFilter[i]])/point>T1_TS){
if(Virt_StopLoss[myFilter[i]]==0 || (Bid-Virt_StopLoss[myFilter[i]])/point>T1_TS){
VirtualModify(Virt_Ticket[myFilter[i]], 0, Bid-T1_TS*point, 0, 0, file);
}
}
}else if(Virt_Type[myFilter[i]]==OP_SELL){
if((Virt_OpenPrice[myFilter[i]]-Ask)/point>T1_TS){
if(Virt_StopLoss[myFilter[i]]==0 || (Virt_StopLoss[myFilter[i]]-Ask)/point>T1_TS){
VirtualModify(Virt_Ticket[myFilter[i]], 0, Ask+T1_TS*point, 0, 0, file);
}
}
}
}//التالى i
}//--- نهاية الزائدة لنظام التداول 1---
if(!IsTesting() || T3_Enabled==1){//---زائدة لنظام التداول 3---
j=OrdersTotal();
for(i=0; i<j; i++){
if(OrderSelect(i,SELECT_BY_POS)){
if(OrderMagicNumber()==T3_Magic){
if(OrderType()==OP_BUY){
if((Bid-OrderOpenPrice())/point>T3_TS){
if(OrderStopLoss()==0 || (Bid-OrderStopLoss())/point>T3_TS){
Modify(OrderTicket(), Bid-T3_TS*point);
}
}
}else if(OrderType()==OP_SELL){
if((OrderOpenPrice()-Ask)/point>T3_TS){
if(OrderStopLoss()==0 || (OrderStopLoss()-Ask)/point>T3_TS){
Modify(OrderTicket(), Ask+T3_TS*point);
}
}
}
}
}
}//التالى i
VirtualFileLoad(file);
VirtualFilter(VIRT_TRADES, -1, -1, Symbol(), T3_Magic);
ArrayResize(myFilter, Virt_Filter_Count);
for(i=0; i<Virt_Filter_Count; i++){
myFilter[i]=Virt_Filter[i];
}//التالى i
for(i=0; i<ArraySize(myFilter); i++){
if(Virt_Type[myFilter[i]]==OP_BUY){
if((Bid-Virt_OpenPrice[myFilter[i]])/point>T3_TS){
if(Virt_StopLoss[myFilter[i]]==0 || (Bid-Virt_StopLoss[myFilter[i]])/point>T3_TS){
VirtualModify(Virt_Ticket[myFilter[i]], 0, Bid-T3_TS*point, 0, 0, file);
}
}
}else if(Virt_Type[myFilter[i]]==OP_SELL){
if((Virt_OpenPrice[myFilter[i]]-Ask)/point>T3_TS){
if(Virt_StopLoss[myFilter[i]]==0 || (Virt_StopLoss[myFilter[i]]-Ask)/point>T3_TS){
VirtualModify(Virt_Ticket[myFilter[i]], 0, Ask+T3_TS*point, 0, 0, file);
}
}
}
}//التالى i
}//--- نهاية الزائدة لنظام التداول 3---
if(!IsTesting() || T4_Enabled==1){//--- زائدة لنظام التداول 4 ---
j=OrdersTotal();
for(i=0; i<j; i++){
if(OrderSelect(i,SELECT_BY_POS)){
if(OrderMagicNumber()==T4_Magic){
if(OrderType()==OP_BUY){
if((Bid-OrderOpenPrice())/point>T4_TS){
if(OrderStopLoss()==0 || (Bid-OrderStopLoss())/point>T4_TS){
Modify(OrderTicket(), Bid-T4_TS*point);
}
}
}else if(OrderType()==OP_SELL){
if((OrderOpenPrice()-Ask)/point>T4_TS){
if(OrderStopLoss()==0 || (OrderStopLoss()-Ask)/point>T4_TS){
Modify(OrderTicket(), Ask+T4_TS*point);
}
}
}
}
}
}//التالى i
VirtualFileLoad(file);
VirtualFilter(VIRT_TRADES, -1, -1, Symbol(), T4_Magic);
ArrayResize(myFilter, Virt_Filter_Count);
for(i=0; i<Virt_Filter_Count; i++){
myFilter[i]=Virt_Filter[i];
}//التالى i
for(i=0; i<ArraySize(myFilter); i++){
if(Virt_Type[myFilter[i]]==OP_BUY){
if((Bid-Virt_OpenPrice[myFilter[i]])/point>T4_TS){
if(Virt_StopLoss[myFilter[i]]==0 || (Bid-Virt_StopLoss[myFilter[i]])/point>T4_TS){
VirtualModify(Virt_Ticket[myFilter[i]], 0, Bid-T4_TS*point, 0, 0, file);
}
}
}else if(Virt_Type[myFilter[i]]==OP_SELL){
if((Virt_OpenPrice[myFilter[i]]-Ask)/point>T4_TS){
if(Virt_StopLoss[myFilter[i]]==0 || (Virt_StopLoss[myFilter[i]]-Ask)/point>T4_TS){
VirtualModify(Virt_Ticket[myFilter[i]], 0, Ask+T4_TS*point, 0, 0, file);
}
}
}
}//التالى i
}//--- نهاية الزائدة لنظام التداول 4 ---
if(!IsTesting() || T5_Enabled==1){//--- زائدة لنظام التداول 5 ---
j=OrdersTotal();
for(i=0; i<j; i++){
if(OrderSelect(i,SELECT_BY_POS)){
if(OrderMagicNumber()==T5_Magic){
if(OrderType()==OP_BUY){
if(OrderStopLoss()==0 || OrderStopLoss()<OrderOpenPrice()){
if((Bid-OrderOpenPrice())/point>T5_TS1){
Modify(OrderTicket(), Bid-T5_TS1*point);
}
}
}else if(OrderType()==OP_SELL){
if(OrderStopLoss()==0 || OrderStopLoss()>OrderOpenPrice()){
if((OrderOpenPrice()-Ask)/point>T5_TS1){
Modify(OrderTicket(), Ask+T5_TS1*point);
}
}
}
}
}
}//التالى i
VirtualFileLoad(file);
VirtualFilter(VIRT_TRADES, -1, -1, Symbol(), T5_Magic);
ArrayResize(myFilter, Virt_Filter_Count);
for(i=0; i<Virt_Filter_Count; i++){
myFilter[i]=Virt_Filter[i];
}//التالى i
for(i=0; i<ArraySize(myFilter); i++){
if(Virt_Type[myFilter[i]]==OP_BUY){
if(Virt_StopLoss[myFilter[i]]==0 || Virt_StopLoss[myFilter[i]]<Virt_OpenPrice[myFilter[i]]){
if((Bid-Virt_OpenPrice[myFilter[i]])/point>T5_TS1){
VirtualModify(Virt_Ticket[myFilter[i]], 0, Bid-T5_TS1*point, 0, 0, file);
}
}
}else if(Virt_Type[myFilter[i]]==OP_SELL){
if(Virt_StopLoss[myFilter[i]]==0 || Virt_StopLoss[myFilter[i]]>Virt_OpenPrice[myFilter[i]]){
if((Virt_OpenPrice[myFilter[i]]-Ask)/point>T5_TS1){
VirtualModify(Virt_Ticket[myFilter[i]], 0, Ask+T5_TS1*point, 0, 0, file);
}
}
}
}//التالى i
}//--- نهاية زائدة لنظام التداول 5 ---
}
//+------------------------------------------------------------------+
//| Expert Openings function |
//+------------------------------------------------------------------+
void Openings(){
//الإجراء لفتح موقف من قبل إشارة،
int S;
double R, OpenPrice, StopLoss;
if(T1_Enabled==1) {
S=T1_SignalOpen();
if(S>-1){
R=VirtualRating(T1_Magic, Symbol(), T1_PeriodRating, 0, file);
if(!VirtualExist(iTime(Symbol(), 0, 0), T1_Magic)){
if(RatingON) Print("Rating 1 of system: ",R);
if(S==OP_BUY) OpenPrice=MarketInfo(Symbol(),MODE_ASK);
else OpenPrice=MarketInfo(Symbol(),MODE_BID);
VirtualSend(Symbol(), S, T1_lot, OpenPrice, Slippage*Q, 0, 0, "R:"+DoubleToStr(R,1)+"%", T1_Magic, 0, file);
if(R>MinRating){
if(!OrderExist(iTime(Symbol(), 0, 0), T1_Magic)){
if(S==OP_BUY){
BUY_pips(T1_lot*R/100, 0, 0, T1_Magic, "System 1 (rating: "+DoubleToStr(R,1)+"%)");
}else if(S==OP_SELL){
SELL_pips(T1_lot*R/100, 0, 0, T1_Magic, "System 1 (rating: "+DoubleToStr(R,1)+"%)");
}
}
}
}//إذا الظاهري غير موجود
}
}
if(T2_Enabled==1) {
S=T2_SignalOpen();
if(S>-1){
R=VirtualRating(T2_Magic, Symbol(), T2_PeriodRating, 0, file);
if(!VirtualExist(iTime(Symbol(), 0, 0), T2_Magic)){
if(RatingON) Print("Rating 2 of system: ",R);
if(S==OP_BUY) {
OpenPrice=MarketInfo(Symbol(),MODE_ASK);
StopLoss=OpenPrice-T2_SL*point;
} else {
OpenPrice=MarketInfo(Symbol(),MODE_BID);
StopLoss=OpenPrice+T2_SL*point;
}
VirtualSend(Symbol(), S, T2_lot, OpenPrice, Slippage*Q, StopLoss, 0, "R:"+DoubleToStr(R,1)+"%", T2_Magic, 0, file);
if(R>MinRating){
if(!OrderExist(iTime(Symbol(), 0, 0), T2_Magic)){
if(S==OP_BUY){
BUY_pips(T2_lot*R/100, T2_SL, 0, T2_Magic, "System 2 (rating: "+DoubleToStr(R,1)+"%)");
}else if(S==OP_SELL){
SELL_pips(T2_lot*R/100, T2_SL, 0, T2_Magic, "System 2 (rating: "+DoubleToStr(R,1)+"%)");
}
}
}
}//إذا الظاهري غير موجود
}
}
if(T3_Enabled==1) {
S=T3_SignalOpen();
if(S>-1){
R=VirtualRating(T3_Magic, Symbol(), T3_PeriodRating, 0, file);
if(!VirtualExist(iTime(Symbol(), 0, 0), T3_Magic)){
if(RatingON) Print("Rating 3 of system: ",R);
if(S==OP_BUY) OpenPrice=MarketInfo(Symbol(),MODE_ASK);
else OpenPrice=MarketInfo(Symbol(),MODE_BID);
VirtualSend(Symbol(), S, T3_lot, OpenPrice, Slippage*Q, 0, 0, "R:"+DoubleToStr(R,1)+"%", T3_Magic, 0, file);
if(R>MinRating){
if(!OrderExist(iTime(Symbol(), 0, 0), T3_Magic)){
if(S==OP_BUY){
BUY_pips(T3_lot*R/100, 0, 0, T3_Magic, "System 3 (rating: "+DoubleToStr(R,1)+"%)");
}else if(S==OP_SELL){
SELL_pips(T3_lot*R/100, 0, 0, T3_Magic, "System 3 (rating: "+DoubleToStr(R,1)+"%)");
}
}
}
}//إذا الظاهري غير موجود
}
}
if(T4_Enabled==1) {
S=T4_SignalOpen();
if(S>-1){
VirtualFilter(VIRT_TRADES, -1, -1, Symbol(), T4_Magic);
if(Virt_Filter_Count==0) {
R=VirtualRating(T4_Magic, Symbol(), T4_PeriodRating, 0, file);
if(!VirtualExist(iTime(Symbol(), 0, 0), T4_Magic)){
if(RatingON) Print("Rating 4 of system: ",R);
if(S==OP_BUY) {
OpenPrice=MarketInfo(Symbol(),MODE_ASK);
StopLoss=OpenPrice-T4_SL*point;
} else {
OpenPrice=MarketInfo(Symbol(),MODE_BID);
StopLoss=OpenPrice+T4_SL*point;
}
VirtualSend(Symbol(), S, T4_lot, OpenPrice, Slippage*Q, StopLoss, 0, "R:"+DoubleToStr(R,1)+"%", T4_Magic, 0, file);
if(R>MinRating){
if(!OrderExist(iTime(Symbol(), 0, 0), T4_Magic)){
if(S==OP_BUY){
BUY_pips(T4_lot*R/100, T4_SL, 0, T4_Magic, "System 4 (rating: "+DoubleToStr(R,1)+"%)");
}else if(S==OP_SELL){
SELL_pips(T4_lot*R/100, T4_SL, 0, T4_Magic, "System 4 (rating: "+DoubleToStr(R,1)+"%)");
}
}
}
}//إذا الظاهري غير موجود
}
}
}
if(T5_Enabled==1) {
S=T5_SignalOpen();
if(S>-1){
VirtualFilter(VIRT_TRADES, -1, -1, Symbol(), T5_Magic);
if(Virt_Filter_Count==0) {
R=VirtualRating(T5_Magic, Symbol(), T5_PeriodRating, 0, file);
if(!VirtualExist(iTime(Symbol(), 0, 0), T5_Magic)){
if(RatingON) Print("Rating 5 of system: ",R);
if(S==OP_BUY) {
OpenPrice=MarketInfo(Symbol(),MODE_ASK);
StopLoss=OpenPrice-T5_SL*point;
} else {
OpenPrice=MarketInfo(Symbol(),MODE_BID);
StopLoss=OpenPrice+T5_SL*point;
}
VirtualSend(Symbol(), S, T5_lot, OpenPrice, Slippage*Q, StopLoss, 0, "R:"+DoubleToStr(R,1)+"%", T5_Magic, 0, file);
if(R>MinRating){
if(!OrderExist(iTime(Symbol(), 0, 0), T5_Magic)){
if(S==OP_BUY){
BUY_pips(T5_lot*R/100, T5_SL, 0, T5_Magic, "System 5 (rating: "+DoubleToStr(R,1)+"%)");
}else if(S==OP_SELL){
SELL_pips(T5_lot*R/100, T5_SL, 0, T5_Magic, "System 5 (rating: "+DoubleToStr(R,1)+"%)");
}
}
}
}//إذا الظاهري غير موجود
}
}
}
}
//+------------------------------------------------------------------+
//| Expert T1_SignalOpen function |
//+------------------------------------------------------------------+
int T1_SignalOpen() {
/* ترجع الدالة إشارة لفتح موضع:
*** - 1 - لا تفتح الموقف
*** 0 - شراء
*** 1 - بيع*/
double MA_Fast =iMA(NULL,0, T1_Fast, 0, MODE_EMA, PRICE_CLOSE, 1);
double MA_Fast_Last=iMA(NULL,0, T1_Fast, 0, MODE_EMA, PRICE_CLOSE, 2);
double MA_Slow =iMA(NULL,0, T1_Slow, 0, MODE_EMA, PRICE_CLOSE, 1);
double MA_Slow_Last=iMA(NULL,0, T1_Slow, 0, MODE_EMA, PRICE_CLOSE, 2);
if(MA_Slow>MA_Slow_Last){
if(MA_Fast>MA_Slow && MA_Fast_Last<MA_Slow_Last){
return(OP_BUY);
}
}
if(MA_Slow<MA_Slow_Last){
if(MA_Fast<MA_Slow && MA_Fast_Last>MA_Slow_Last){
return(OP_SELL);
}
}
return(-1);
}
//+------------------------------------------------------------------+
//| Expert T1_SignalClose function |
//+------------------------------------------------------------------+
bool T1_SignalClose(int type) {
/* ترجع الدالة إشارة لإغلاق موضع:
** فالس - لا تغلق الموقف
*** ترو - اغلق*/
if(type==T1_SignalOpen()) return(false);
double MA_Fast =iMA(NULL,0, T1_Fast, 0, MODE_EMA, PRICE_CLOSE, 1);
double MA_Slow =iMA(NULL,0, T1_Slow, 0, MODE_EMA, PRICE_CLOSE, 1);
if(type==OP_BUY){
if(MA_Fast<MA_Slow) return(true);
}else if(type==OP_SELL){
if(MA_Fast>MA_Slow) return(true);
}
return(false);
}
//+------------------------------------------------------------------+
//| Expert T2_SignalOpen function |
//+------------------------------------------------------------------+
int T2_SignalOpen(int Candle=0) {
/* ترجع الدالة إشارة لفتح موضع:
*** - 1 - لا تفتح الموقف
*** 0 - شراء
*** 1 - بيع*/
double CCI=iCCI(NULL,0,T2_PeriodCCI,PRICE_TYPICAL,Candle+1);
double CCILast=iCCI(NULL,0,T2_PeriodCCI,PRICE_TYPICAL,Candle+2);
if((CCI<T2_LevelCCI)&&(CCILast>T2_LevelCCI)) return(OP_SELL);
if((CCI>-T2_LevelCCI)&&(CCILast<-T2_LevelCCI)) return(OP_BUY);
return(-1);
}
//+------------------------------------------------------------------+
//| Expert T2_SignalClose function |
//+------------------------------------------------------------------+
bool T2_SignalClose(int type) {
/* ترجع الدالة إشارة لإغلاق موضع:
** فالس - لا تغلق الموقف
*** ترو - اغلق*/
int i=0;
int SS=-1;
while (SS==-1) {
SS=T2_SignalOpen(i);
i++;
}
if(type==SS) return(false);
return(true);
}
//+------------------------------------------------------------------+
//| Expert T3_SignalOpen function |
//+------------------------------------------------------------------+
int T3_SignalOpen() {
/* ترجع الدالة إشارة لفتح موضع:
*** - 1 - لا تفتح الموقف
*** 0 - شراء
*** 1 - بيع*/
double MA_Fast =iMA(NULL,0, T3_Fast, 0, MODE_EMA, PRICE_CLOSE, 1);
double MA_Fast_Last=iMA(NULL,0, T3_Fast, 0, MODE_EMA, PRICE_CLOSE, 2);
double MA_Slow =iMA(NULL,0, T3_Slow, 0, MODE_EMA, PRICE_CLOSE, 1);
double MA_Slow_Last=iMA(NULL,0, T3_Slow, 0, MODE_EMA, PRICE_CLOSE, 2);
if(MA_Slow>MA_Slow_Last){
if(MA_Fast>MA_Slow && MA_Fast_Last<MA_Slow_Last){
return(OP_BUY);
}
}
if(MA_Slow<MA_Slow_Last){
if(MA_Fast<MA_Slow && MA_Fast_Last>MA_Slow_Last){
return(OP_SELL);
}
}
return(-1);
}
//+------------------------------------------------------------------+
//| Expert T3_SignalClose function |
//+------------------------------------------------------------------+
bool T3_SignalClose(int type) {
/* ترجع الدالة إشارة لإغلاق موضع:
** فالس - لا تغلق الموقف
*** ترو - اغلق*/
if(type==T3_SignalOpen()) return(false);
double MA_Fast =iMA(NULL,0, T3_Fast, 0, MODE_EMA, PRICE_CLOSE, 1);
double MA_Slow =iMA(NULL,0, T3_Slow, 0, MODE_EMA, PRICE_CLOSE, 1);
if(type==OP_BUY){
if(MA_Fast<MA_Slow) return(true);
}else if(type==OP_SELL){
if(MA_Fast>MA_Slow) return(true);
}
return(false);
}
//+------------------------------------------------------------------+
//| Expert T4_SignalOpen function |
//+------------------------------------------------------------------+
int T4_SignalOpen(int CurrentCandle=0) { //Sergey Lozovik's strategy
/* ترجع الدالة إشارة لفتح موضع:
*** - 1 - لا تفتح الموقف
*** 0 - شراء
*** 1 - بيع*/
double LMA200=iMA(NULL,0,200,0,MODE_EMA,PRICE_OPEN,CurrentCandle+1);
double MA200=iMA(NULL,0,200,0,MODE_EMA,PRICE_OPEN,CurrentCandle);
double LMA50 =iMA(NULL,0,50 ,0,MODE_EMA,PRICE_OPEN,CurrentCandle+1);
double MA50 =iMA(NULL,0,50 ,0,MODE_EMA,PRICE_OPEN,CurrentCandle);
double LMA10 =iMA(NULL,0,10 ,0,MODE_EMA,PRICE_OPEN,CurrentCandle+1);
double MA10 =iMA(NULL,0,10 ,0,MODE_EMA,PRICE_OPEN,CurrentCandle);
double LMACD=iMACD(NULL,0,12,26,9,PRICE_OPEN,MODE_MAIN,CurrentCandle+1);
double MACD=iMACD(NULL,0,12,26,9,PRICE_OPEN,MODE_MAIN,CurrentCandle);
if(MA200>LMA200){
if(MA50>LMA50 && MA50>MA200) {
if(MA10>LMA10 && MA10>MA50) {
if(MACD>LMACD && MACD>T4_LimitMACD) {
return(0);
}
}
}
} else if(MA200<LMA200) {
if(MA50<LMA50 && MA50<MA200) {
if(MA10<LMA10 && MA10<MA50) {
if(MACD<LMACD && MACD<-T4_LimitMACD) {
return(1);
}
}
}
}
return(-1);
}
//+------------------------------------------------------------------+
//| Expert T4_SignalClose function |
//+------------------------------------------------------------------+
bool T4_SignalClose(int type) {
/* ترجع الدالة إشارة لإغلاق موضع:
** فالس - لا تغلق الموقف
*** ترو - اغلق*/
double MA50 = iMA(NULL,0,50 ,0,MODE_EMA,PRICE_OPEN,0);
if(type==OP_BUY) {
if(Close[1]<MA50) {
return(true);
}
} else if(type==OP_SELL){
if(Close[1]>MA50) {
return(true);
}
}
return(false);
}
//+------------------------------------------------------------------+
//| Expert T5_SignalOpen function |
//+------------------------------------------------------------------+
int T5_SignalOpen(int Candle=0) {
/* ترجع الدالة إشارة لفتح موضع:
*** - 1 - لا تفتح الموقف
*** 0 - شراء
*** 1 - بيع*/
double CCI=iCCI(NULL,0,T5_PeriodCCI,PRICE_TYPICAL,Candle+1);
double CCILast=iCCI(NULL,0,T5_PeriodCCI,PRICE_TYPICAL,Candle+2);
if((CCI>T5_LevelCCI)&&(CCILast<T5_LevelCCI)) return(OP_BUY);
if((CCI<-T5_LevelCCI)&&(CCILast>-T5_LevelCCI)) return(OP_SELL);
return(-1);
}
//+------------------------------------------------------------------+
//| Expert T5_SignalClose function |
//+------------------------------------------------------------------+
bool T5_SignalClose(int type) {
/* ترجع الدالة إشارة لإغلاق موضع:
** فالس - لا تغلق الموقف
*** ترو - اغلق*/
int i=0;
int SS=-1;
double MyLevel, CCI;
if(type==OP_BUY){
MyLevel=T5_LevelCCI-T5_TralingCCI;
}else{
MyLevel=T5_LevelCCI+T5_TralingCCI;
}
while (SS==-1) {//البحث عن إشارة شراء
SS=T5_SignalOpen(i);
i++;
CCI=iCCI(NULL,0,T5_PeriodCCI,PRICE_TYPICAL,i);
if(type==OP_BUY){
if(CCI>MyLevel+2*T5_TralingCCI){
MyLevel=MyLevel+T5_TralingCCI;
}
}else{
if(CCI<MyLevel-2*T5_TralingCCI){
MyLevel=MyLevel-T5_TralingCCI;
}
}
}
CCI=iCCI(NULL,0,T5_PeriodCCI,PRICE_TYPICAL,1);
if(type==OP_BUY){
if(CCI<MyLevel) return(true);
}else{
if(CCI>MyLevel) return(true);
}
return(false);
}
//+------------------------------------------------------------------+
//| Expert Block function |
//+------------------------------------------------------------------+
bool Block() {//منع
if(!IsTradeAllowed() || IsTradeContextBusy() || !IsConnected()) {
Print("السوق مغلق، لايوجد اتصال الخبير لا يسمح بالتجارة");
return(true);
}
return(false);
}
//+------------------------------------------------------------------+
- 04-08-2017, 04:00 PM #382كود PHP:
//+------------------------------------------------------------------+
int Slippage = 3;double point;
int digits,Q;
//+------------------------------------------------------------------+
int SELL_pips(double lt, int sl_pips, int tp_pips, int magic=0, string comment="") {
double sl, tp;
int ticket = -1; //بيع حسب سعر العطاء Bid price
int LE=135;
if(lt<MarketInfo(Symbol(), MODE_MINLOT)) return(0);
if(lt>MarketInfo(Symbol(), MODE_MAXLOT)) lt=MarketInfo(Symbol(), MODE_MAXLOT);
if(lt>AccountFreeMargin()*0.90/MarketInfo(Symbol(),MODE_MARGINREQUIRED)) lt=AccountFreeMargin()*0.90/MarketInfo(Symbol(),MODE_MARGINREQUIRED);
lt = NormalizeDouble(lt, MathAbs(MathLog(MarketInfo(Symbol(), MODE_LOTSTEP))/MathLog(10.0))+0.5);
while(LE>134 && LE<139) {
if(sl_pips>0) {
if(sl_pips<MarketInfo(Symbol(), MODE_STOPLEVEL)) sl_pips=MarketInfo(Symbol(), MODE_STOPLEVEL);
sl=NormalizeDouble(Bid+sl_pips*point,digits);
}
if(tp_pips>0) {
if(tp_pips<MarketInfo(Symbol(), MODE_STOPLEVEL)) tp_pips=MarketInfo(Symbol(), MODE_STOPLEVEL);
tp=NormalizeDouble(Bid-tp_pips*point,digits);
}
ticket = OrderSend(Symbol(), OP_SELL, lt, Bid, Slippage*Q, sl, tp, comment, magic, 0, Red);
LE = GetLastError();
Sleep(5000);
RefreshRates();
}
if (ticket > 0) Sleep(10000);
return(ticket);
}
//+------------------------------------------------------------------+
int BUY_pips(double lt, int sl_pips, int tp_pips, int magic=0, string comment="") {
double sl, tp;
int ticket = -1; //شراء حسب سعر الطلب Ask price
int LE=135;
if(lt<MarketInfo(Symbol(), MODE_MINLOT)) return(0);
if(lt>MarketInfo(Symbol(), MODE_MAXLOT)) lt=MarketInfo(Symbol(), MODE_MAXLOT);
if(lt>AccountFreeMargin()*0.90/MarketInfo(Symbol(),MODE_MARGINREQUIRED)) lt=AccountFreeMargin()*0.90/MarketInfo(Symbol(),MODE_MARGINREQUIRED);
lt = NormalizeDouble(lt, MathAbs(MathLog(MarketInfo(Symbol(), MODE_LOTSTEP))/MathLog(10.0))+0.5);
while(LE>134 && LE<139) {
if(sl_pips>0) {
if(sl_pips<MarketInfo(Symbol(), MODE_STOPLEVEL)) sl_pips=MarketInfo(Symbol(), MODE_STOPLEVEL);
sl=NormalizeDouble(Ask-sl_pips*point,digits);
}
if(tp_pips>0) {
if(tp_pips<MarketInfo(Symbol(), MODE_STOPLEVEL)) tp_pips=MarketInfo(Symbol(), MODE_STOPLEVEL);
tp=NormalizeDouble(Ask+tp_pips*point,digits);
}
ticket = OrderSend(Symbol(), OP_BUY, lt, Ask, Slippage*Q, sl, tp, comment, magic, 0, Blue);
LE = GetLastError();
Sleep(5000);
RefreshRates();
}
if (ticket > 0) Sleep(10000);
return(ticket);
}
//+------------------------------------------------------------------+
int SELLSleep(double price, double lt, double sl=0, double tp=0, int magic=0, string comment="") {
// إنشاء أوامر المعلقة للشراء (السعر الحالي أعلى من 'السعر')
double stoplimit = (MarketInfo(Symbol(), MODE_STOPLEVEL)+Slippage)*point;
double spread = MarketInfo(Symbol(), MODE_SPREAD)*point;
int ticket = -1; //sell by Bid price
Print("محاولة إنشاء أمر معلق للشراء حسب السعر",price,", sl=",sl,", tp=",tp,", Ask=",Ask,", Bid=", Bid);
price=NormalizeDouble(price,digits);
if(Bid-price<stoplimit) {
Print("تجاوز الحد الأدنى من وضع أمر معلق للشراء عن طريق سعرالافتتاح");
Print("الحد الأدنى هو",stoplimit/point, " points");
return(0);
}
if(sl>0) {
sl=NormalizeDouble(sl,digits);
if(sl-price-spread<stoplimit) {
Print("SELLSleep: حد إيقاف الخسارة غير صحيح. الحد الأدنى:",stoplimit/point, "نقطة من سعر العطاء");
return(0);
}
}
if(tp>0) {
tp=NormalizeDouble(tp,digits);
if(price-tp<stoplimit) {
Print("SELLSleep: Incorrect TakeProfit limit. Minimum: ",stoplimit/point, "نقطة من سعر الطلب");
return(0);
}
}
ticket = OrderSend(Symbol(), OP_SELLSTOP, lt, price, Slippage*Q, sl, tp, comment, magic, 0, Red);
if (ticket > 0) Sleep(10000);
return(ticket);
}
//+------------------------------------------------------------------+
int BUYSleep(double price, double lt, double sl=0, double tp=0, int magic=0, string comment="") {
// إنشاء أوامر معلقة للشراء (السعر الحالي أقل من "السعر")
double stoplimit = (MarketInfo(Symbol(), MODE_STOPLEVEL)+Slippage)*point;
double spread = MarketInfo(Symbol(), MODE_SPREAD)*point;
int ticket = -1; //buy by Ask price
Print("محاولة إنشاء أمر معلق للشراء حسب السعر",price,", sl=",sl,", tp=",tp,", Ask=",Ask,", Bid=", Bid);
price=NormalizeDouble(price,digits);
if(price-Ask<stoplimit) {
Print("تجاوز الحد الأدنى من وضع أمر معلق للشراء عن طريق سعرالافتتاح");
Print("الحد الأدنى هو ",stoplimit/point, " points");
return(0);
}
if(sl>0) {
sl=NormalizeDouble(sl,digits);
if(price-spread-sl<stoplimit) {
Print("BUYSleep: حد إيقاف الخسارة غير صحيح. الحد الأدنى:",stoplimit/point, "نقطة من سعر العطاء Bid price");
return(0);
}
}
if(tp>0) {
tp=NormalizeDouble(tp,digits);
if(tp-price<stoplimit) {
Print("BUYSleep: حد تاكيبروفيت غير صحيح. الحد الأدنى: ",stoplimit/point, "نقاط من سعر الطلب Ask price");
return(0);
}
}
ticket = OrderSend(Symbol(), OP_BUYSTOP, lt, price, Slippage*Q, sl, tp, comment, magic, 0, Blue);
if (ticket > 0) Sleep(10000);
return(ticket);
}
//+------------------------------------------------------------------+
int Modify(int ticket, double sl = 0.0, double tp = 0.0) {
double stoplimit = MarketInfo(Symbol(),MODE_STOPLEVEL)*point;
if(OrderSelect(ticket, SELECT_BY_TICKET)) {
sl=NormalizeDouble(sl,digits);
tp=NormalizeDouble(tp,digits);
if(OrderType()==OP_BUY) {
if(sl>0) {
if(OrderStopLoss()>0)
if(OrderStopLoss()+Slippage*Q*point>=sl) return(0);
if(Bid-sl<stoplimit) {
Print("تعديل: إيقاف الخسارة قريبة جدا (",(Bid-sl)/point," points). مطلوب ما لا يقل عن: ", stoplimit/point);
return(0);
}
}
if(tp>0) if(tp-Ask<stoplimit) {
Print("تعديل: تحقيق أرباح قريبة جدا(",(tp-Ask)/point," point). مطلوب ما لا يقل عن: ", stoplimit/point);
return(0);
}
} else if(OrderType()==OP_SELL) {
if(sl>0) {
if(OrderStopLoss()>0)
if(OrderStopLoss()-Slippage*Q*point<=sl) return(0);
if(sl-Ask<stoplimit) {
Print("تعديل: إيقاف الخسارة قريبة جدا (",(sl-Ask)/point," point).مطلوب ما لا يقل عن: ", stoplimit/point);
return(0);
}
}
if(tp>0) if(Bid-tp<stoplimit) {
Print("تعديل: تحقيق أرباح قريبة جدا (",(Bid-tp)/point," points). مطلوب ما لا يقل عن: ", stoplimit/point);
return(0);
}
}
if(sl>0 && tp>0) {
if(OrderModify(ticket,OrderOpenPrice(), sl, tp, 0)==FALSE) Print("Error OrderModify(): ",GetLastError());
} else if(sl>0) {
if(OrderModify(ticket,OrderOpenPrice(), sl, OrderTakeProfit(), 0)==FALSE) Print("Error OrderModify(): ",GetLastError());
} else if(tp>0) {
if(OrderModify(ticket,OrderOpenPrice(), OrderStopLoss(), tp, 0)==FALSE) Print("Error OrderModify(): ",GetLastError());
}
}
return(0);
}
//+------------------------------------------------------------------+
bool OrderExist(datetime TimeOpenCandle, int fMagic=0){
// إرجاع صحيح إذا كان الموقف مع عدد السحر محددة
// يتم فتحه بعد TimeOpenCandle
int j = OrdersTotal();
for(int i=0; i<j; i++){
if(OrderSelect(i, SELECT_BY_POS)){
if(OrderMagicNumber()==fMagic || fMagic==0){
if(OrderOpenTime()>=TimeOpenCandle){
return(true);
}
}
}
}//Next i
return(false);
}
- 04-08-2017, 05:26 PM #383
وعليكم السلام ورحمة الله وبركاته
لم تستخدم الكومنت بشكل صحيح وبالتالي تم تجاهل بقية الكود
دعنا نتفق يا 2013Lemsantah يكون مشروع مشترك حتى نهاية عام 2019 (ان شاء الله وقت كاف وزيادة لنتحدث عن شيء لامثيل
له)
الاكواد كل كود فيه 20 فكرة
ضع نفسك مكان القارئ اخي.
حاليا اي صفقة حددنا:
اسؤا خسارة لها--احسن ربح لها-ربحها---ايضا قائمة بالاسؤا والافضل والاغلاق على فحة واحدة---ينظرة تفهم اشياء يأخذ غر فيها 3 اشهر
ايضا فكرة حصر عدد الاةامر وادارة رأس المال وضعنا لبناته الاساسية (قيمة النطة وقيمة YYYDDD والمارجن)
ايضا الرسومات تبين سيرة المارجن والهاش الحر
الخ
اذا كنت كما اظن شخصيا انك ضليع في البرمجة نريد ان نبني عليها---اتمنى تكون فاهم كل الصفحات هنا كما افهمها انا.
ويد الله مع الجماعة وارجو ان لاتكون من يخشخشون اي شيء يتوهمون حسنه وان تكون معطاء.آخر تعديل بواسطة فيلسوف البادية ، 04-08-2017 الساعة 05:37 PM
- 04-08-2017, 05:33 PM #384
فنحن الان اخي كسرنا حواجز كثيرة بالنسبة للاخرين اكثر من معجزة وخارج تصوراتهم:
نريد هنا سوبر عباقرة (عباقرة او انصاف عباقرة مايمشون هنا)
حاليا انظر للرسمة اسفل واقرأ المكتوب بالاصفر بالعربي: (شغال عليها)
لانها اخر 400 يوم للدخول على القمم والقيعان---كان وقتها كارثة الكيبل
اذا حذفنا ازواج الكيبل بضغطة زر على الشيء GBP ينعكس فورا التغير على المنحنيات:
آخر تعديل بواسطة فيلسوف البادية ، 04-08-2017 الساعة 05:36 PM
- 04-08-2017, 05:43 PM #385
اضغط هنا يعرض صفقات اليوم 214 فقط!!
يعني وقتها نعرف اسباب الكارثة.
--------
كيف نثق في النتائج
ج: اذا كانت المعادلات الرياضية صحيحة.
وبالتالي ارجو من الجميع قراءة اهم موضوع كتب في مجال الفوركس هنا:
https://forum.arabictrader.com/t240676.html
معادلة أسعار الصرف: YYYXXX=YYYDDD/XXXDDD
حاليا لن امتحن اي احد من خلال ذلك الموضوع لاكشف اهليته من عدمها للتواجد هنا ولكن رجاء لابد يفهم ذلك الموضوع اولا
فأي شيء بعد ذلك بعد الانتهاء من تأسيس البنية التحتية للباكتستر الفوري هو الحديث عن ادارة رأس المال ونتوقع شغل احترافي عن فهم ووعي.
ولا يحق لأي احد ابدا ان يتحدث عن ادارة رأس المال دون الموضوع في الرابط. العقل لايتصور ان يتحدث اي جاهل عن ادارة رأس المال.
- 05-08-2017, 05:22 AM #386
أفكار:
كيف تدمج أكثر من فكرة معا؟
مثال: الماكد يناه كدخول وخروج فني
وبينها باضافة المدرج من السعر الفني والخرج فني
ةبيناه بوفقف خسارة محدد وهدف محدد؟
هذه الثلاثة معا كيف ندمجها؟
نصيغ البرنامج بحيث يشمل كل الحالات ولكن اذا اردنا خروج فني ببساطة نجعل الهدف والوقف 5000 نقطة
وجه الفكرة هنا: هدف 5000 نقطة كأنه لايوجد ولو تحقق قل الحمد لله.
- 05-08-2017, 07:30 AM #387
تم الانتهاء من اخر رد وسيعمم على اي استراتيجية, (مزاوجة التيك بروفت مع الخروج الفني)
يأتي:
تحديد البداية بالتاريخ بدلا من رقم الشمعة
تحديد النهاة بالتاريخ
اسثتناء فترة محددة على عملة معينة
مثلا على ازواج الكيبل تجعل الخبير يمنع التداول من تاريخ 1 مايو 2016 مثلا الى 1 مايو 2017 مثلا او اي عملة نشك ان عليها اخبار قوية ضبابية
عزل دالة وقف الخسارة والتيك بروفت
تحويل الملفات الى mqh
جعل جميع برامجنا التأسيسية تحت خبير واحد--واختيار اي خبير من خلال الضغط على ايقونة الخبير على التشارت (ست مربعات صغيرة متجاورة)
-------
بالامس تحدثنا انك اذا ضغط على منحنى اسؤا اكوتي في نقطة محددة ) يوم محدد( --سيعرض صفقات ذلك اليوم فقط, مع عرض اسؤا سعر لكل صفقة لكل ذلك اليوم
- 05-08-2017, 07:34 AM #388
- 05-08-2017, 07:42 AM #389
- 05-08-2017, 07:50 AM #390