رد:موضوع مخصص للأسئلة البرمجية
مستر دولار السلام علكيم ورحمة الله وبركاته
حبيبي الغالي ممكن تساعدني في الفكرة دي
عندي امر باي مع تيك بروفت 50 نقطة وستوب لوز زيرو
بدل استوب لوز عايزه يعمل هدج بعد خسارة 20 نقطة
وكل ما فتحت امر جديد باي او سيل احط تيك بروفت 50 نقطة وافتح هدج بعد خسارة 20 نقطة
والهدج ايضا يكون تيك بروفت 50 نقطة وستوب لوز زيرو
واذا ربح احد العقود يقوم باقفال عقد الهدج بتاعه اللي فتحناه بدل الستوب لوز
ولو ربح الهدج يقوم باقفال العقد الاصلي بتاعه
انا اعرف افتح هدج بعد خسارة 20 نقطة
بس ما عرفت اربط بين العقدين عشان اقفلهم مع بعض خصوصا لما يكون عندي عقود كثيرة مفتوحة
عايز كل عقدين مرتبطين مع بعض اقفلهم مع بعض في حالة لو واحد فيهم ربح
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم
رجاء اريد داله لو تحرك السعر عدد نقط معينة مثلا فى خلال عدد ثوانى معينة ان يفتح مثلا امر شراء
ولكم جزيل الشكر
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
وعليكم السلام ورحمة الله وبركاته
مرحبا بالأخ الغالي محمد
طيب أرفق الكود أو الإكسبرت الذي قمت بعمله وسوف أقوم بتوضيح التعديل عليه مباشرة
هو الحقيقة لم ابدأ باكسبرت استطيع ان ارفقه هي بداية فكرة عمل اكسبرت
وبدأتها بتعليق امر سيل ستوب في نفس الوقت الذي اضع الامر الاصلي
ولكن المشكلة انه لو ربح الامر الاصلي فاني لا اعرف الامر المعلق المرادف له لاقوم بالغائه
او لو تفعل الامر المعلق وربح فاني لا اعرف الامر الاصلي لاغلقه او اعدل فيه
كود PHP:
if(TP==0){double BUY_TP=0;}else{BUY_TP=Ask+BUY_TP*Point;}
if(SL==0){double BUY_SL=0;}else{BUY_SL=Ask-SL*Point;}
if(ApplyHedgeInsteadOfSL == true)
{
double SelToHedgBuy_Price = BUY_SL; BUY_SL = 0;
}
int successOrder = OrderSend(Symbol(),OP_BUY ,Lots,Ask,3,BUY_SL,BUY_TP,"",MagicNumber,0,Blue );
if(ApplyHedgeInsteadOfSL == true)
{
successOrder = OrderSend(Symbol(),OP_SELLSTOP ,Lots,SelToHedgBuy_Price,3,0,BUY_TP,BuyTicketNbr,MagicNumber,0,Red );
}
وهناك طريقة اخرى
وهي ان افتح الهدج في الوقت الذي تكون الخسارة قد تجاوزت فعليا 20 نقطة
ولكن ايضا نفس المشكلة وهي لو ربح احد العقدين ، لا اعرف العقد المرتبط معه لكي اغلقه في نفس الوقت
والحقيقة انه لا يوجد امر يوضح ان الامر قد اغلق بواسطة التيك بروفت
ولا يوجد طريقة لمعرفة ذلك الا اذا اغلقت العقد برمجيا حينما يصل الى الربح المحدد يعني بدون استخدام خاصية التيك بروفت
ونفس الحكاية لا اعرف العقد المرتبط معه
كود PHP:
if(ApplyHedgeInsteadOfSL == true)
{
// ck for buy orders and open hedge sell order
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderType() == OP_BUY )
{
double profit = Bid-OrderOpenPrice();
double SelToHedgBuy_TP = OrderOpenPrice() - TP*Point;
SelToHedgBuy_Price = NormalizeDouble(OrderOpenPrice()-SL*Point,Digits);
}
if(profit<=-SL*Point && countSellOrdersSamePrice(Symbol(),SelToHedgBuy_Price)==0)
{
int successOrder1 = OrderSend(Symbol(),OP_SELL ,Lots,Bid,3,0,SelToHedgBuy_TP,"",MagicNumber,0,Red );
}
}
}
كود PHP:
int countSellOrdersSamePrice(string currency , double Price)
{
int total=OrdersTotal();
int SellOrderSamePrice=0;
for(int cnt=total;cnt>=0;cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==currency && OrderType()==OP_SELL && NormalizeDouble(OrderOpenPrice(),Digits)==NormalizeDouble(Price,Digits))
{
SellOrderSamePrice ++;
}
}
return(SellOrderSamePrice);
}
3 مرفق
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم و رحمة الله و بركاته
المرجو من أحد الإخوة المبرمجين تعديل كود المؤشر التالي و هو للأخ كينجو الله يشافيه و يفرج عنه و هو مؤشر القنوات للأخ الكريم د.جمال ممدوح المشكل هو أن المؤشر يرسم قناة الشارت اليومي التي ترسم بين فواصل الشهر بيوم قبل الشهر و الخطأ موجود فقط في القناة الثانية التي ترسم لمدة شهرين : و نريد أن نضيف أخي قناة ثالثة على جميع الفرمات أي الساعة و الأربع ساعات و اليومي. تحياتي أخواني وجزاكم الله خيرا
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة poles2008
السلام عليكم
رجاء اريد داله لو تحرك السعر عدد نقط معينة مثلا فى خلال عدد ثوانى معينة ان يفتح مثلا امر شراء
ولكم جزيل الشكر
وعليكم السلام
مثلا أريد فتح صفقة عندما يتحرك السعر صعودا 10 نقاط في خلال 5 ثواني والعكس في حالة البيع
مثال
كود PHP:
static double LastPrice=Bid;
static datetime FirstTime;
if(Bid>LastPrice)
{
if(Up==0)FirstTime=TimeCurrent();
LastPrice=Bid;
Up++;
Dn=0;
}
if(Bid<LastPrice)
{
if(Dn==0)FirstTime=TimeCurrent();
LastPrice=Bid;
Dn++;
Up=0;
}
if(Up>=10&&TimeCurrent()-FirstTime<=5)
{
// buy signal
}
if(Dn>=10&&TimeCurrent()-FirstTime<=5)
{
//sell signal
}
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة محمد بن حامد
هو الحقيقة لم ابدأ باكسبرت استطيع ان ارفقه هي بداية فكرة عمل اكسبرت
وبدأتها بتعليق امر سيل ستوب في نفس الوقت الذي اضع الامر الاصلي
ولكن المشكلة انه لو ربح الامر الاصلي فاني لا اعرف الامر المعلق المرادف له لاقوم بالغائه
او لو تفعل الامر المعلق وربح فاني لا اعرف الامر الاصلي لاغلقه او اعدل فيه
كود PHP:
if(TP==0){double BUY_TP=0;}else{BUY_TP=Ask+BUY_TP*Point;}
if(SL==0){double BUY_SL=0;}else{BUY_SL=Ask-SL*Point;}
if(ApplyHedgeInsteadOfSL == true)
{
double SelToHedgBuy_Price = BUY_SL; BUY_SL = 0;
}
int successOrder = OrderSend(Symbol(),OP_BUY ,Lots,Ask,3,BUY_SL,BUY_TP,"",MagicNumber,0,Blue );
if(ApplyHedgeInsteadOfSL == true)
{
successOrder = OrderSend(Symbol(),OP_SELLSTOP ,Lots,SelToHedgBuy_Price,3,0,BUY_TP,BuyTicketNbr,MagicNumber,0,Red );
}
وهناك طريقة اخرى
وهي ان افتح الهدج في الوقت الذي تكون الخسارة قد تجاوزت فعليا 20 نقطة
ولكن ايضا نفس المشكلة وهي لو ربح احد العقدين ، لا اعرف العقد المرتبط معه لكي اغلقه في نفس الوقت
والحقيقة انه لا يوجد امر يوضح ان الامر قد اغلق بواسطة التيك بروفت
ولا يوجد طريقة لمعرفة ذلك الا اذا اغلقت العقد برمجيا حينما يصل الى الربح المحدد يعني بدون استخدام خاصية التيك بروفت
ونفس الحكاية لا اعرف العقد المرتبط معه
كود PHP:
if(ApplyHedgeInsteadOfSL == true)
{
// ck for buy orders and open hedge sell order
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderType() == OP_BUY )
{
double profit = Bid-OrderOpenPrice();
double SelToHedgBuy_TP = OrderOpenPrice() - TP*Point;
SelToHedgBuy_Price = NormalizeDouble(OrderOpenPrice()-SL*Point,Digits);
}
if(profit<=-SL*Point && countSellOrdersSamePrice(Symbol(),SelToHedgBuy_Price)==0)
{
int successOrder1 = OrderSend(Symbol(),OP_SELL ,Lots,Bid,3,0,SelToHedgBuy_TP,"",MagicNumber,0,Red );
}
}
}
كود PHP:
int countSellOrdersSamePrice(string currency , double Price)
{
int total=OrdersTotal();
int SellOrderSamePrice=0;
for(int cnt=total;cnt>=0;cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==currency && OrderType()==OP_SELL && NormalizeDouble(OrderOpenPrice(),Digits)==NormalizeDouble(Price,Digits))
{
SellOrderSamePrice ++;
}
}
return(SellOrderSamePrice);
}
أحد الطرق التي أستخدمها عندما أحاول ربط أمرين معا بحيث يغلقوا في نفس الوقت بعد ذلك هو ربط رقم التيكيت للأمر الأول بالكومنت في الرقم الثاني بالظبط كما وضعت أنت في الكود
كود PHP:
if(TP==0){double BUY_TP=0;}else{BUY_TP=Ask+BUY_TP*Point;}
if(SL==0){double BUY_SL=0;}else{BUY_SL=Ask-SL*Point;}
if(ApplyHedgeInsteadOfSL == true)
{
double SelToHedgBuy_Price = BUY_SL; BUY_SL = 0;
}
int successOrder = OrderSend(Symbol(),OP_BUY ,Lots,Ask,3,BUY_SL,BUY_TP,"",MagicNumber,0,Blue );
if(ApplyHedgeInsteadOfSL == true)
{
successOrder = OrderSend(Symbol(),OP_SELLSTOP ,Lots,SelToHedgBuy_Price,3,0,BUY_TP,successOrder,MagicNumber,0,Red );
}
المهم الآن معرفة هل أغلق أحد الأمرين أم لا
مثال
كود PHP:
bool IsOtherOrderClosed(string comm,int tick)
{
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string comment=OrderComment();int ticket=OrderTicket();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(comm==""&&ticket==comm)return(false);
if(comm!=""&&comment==tick)return(false);
}
}
return(true);
}
ثم سيكون أوامر الإغلاق
كود PHP:
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string comment=OrderComment();int ticket=OrderTicket();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(IsOtherOrderClosed(comment,ticket))
{
if(OrderType()>OP_SELL)OrderDelete(ticket);
else OrderClose(ticcket,OrderLots(),OrderClosePrice(),3);
}
}
}
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة youssef_1025
السلام عليكم و رحمة الله و بركاته
المرجو من أحد الإخوة المبرمجين تعديل كود المؤشر التالي و هو للأخ كينجو الله يشافيه و يفرج عنه و هو مؤشر القنوات للأخ الكريم د.جمال ممدوح المشكل هو أن المؤشر يرسم قناة الشارت اليومي التي ترسم بين فواصل الشهر بيوم قبل الشهر و الخطأ موجود فقط في القناة الثانية التي ترسم لمدة شهرين : و نريد أن نضيف أخي قناة ثالثة على جميع الفرمات أي الساعة و الأربع ساعات و اليومي. تحياتي أخواني وجزاكم الله خيرا
وعليكم السلام ورحمة الله وبركاته
هذا الموضوع مخصص للأسئلة البرمجيه فقط أخي العزيز فأرجو أن تفتح موضوع توضح فيه التعديل الذي تريده أو إذا كان يوجد موضوع سابق للمؤشر ضع الطلب فيه
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة fxsmartsniper
للتذكير مستر دولار بارك الله لك
سوف تقوم بعمل داله لمعرفة عدد الصفقات المفتوحه للعمله
مثال
كود PHP:
int orderscnt(){
int cnt=0;
for(int i =0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber()){
cnt++;
}
}
}
return(cnt);
}
وطبعا سيكون الشرط
كود PHP:
if(orderscnt()<maxtrade)
ستضيف الشرط مع شروط فتح الصفقات الأخرى فلن يفتح صفقات أخرى وعندما تغلق الصفقه سينتظر تحقق الشروط
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
وفقك الله
السلام عليكم ورحمة الله وبركاته
ويوفقنا جميعا اللهم آمين :)
أستاذي الكريم
كيف يمكن برمجة المضاعفات بغرض التعويض فقط؟
مثال
لنفترض الستوب لوس التابث 20 نقطة والهدف في أول صفقة 20 نقطة
أول صفقة بلوت 0.1 بهدف 20 نقطة عادي
المضاعفة الأولى بلوت 0.2 بهدف 10 نقطة
المضاعفة التانية بلوت 0.4 بهدف 15 نقطة
المضاعفة الثالثة بلوت 0.8 بهدف 17.5 نقطة
المضاعفة الرابعة بلوت 1.6 بهدف 18.8 نقطة
المضاعفة الخامسة بلوت 3.2 بهدف 19.4 نقطة
وهكذا ...
لأنه كلما قل الهدف (ولو جزء من النقطة) كلما زادت نسبة احتمال الربح وقلت عدد المضاعفات
أي التعويض السريع والخروج من دوامة المضاعفات بسرعة
هل يوجد مثل هذا الكود ؟!!
إذا يوجد فما هو التعديل المطلوب بكود المضاعفات العادية بطريقة برنامج Forex EA Generator 4
كود:
double CurrentLots = 1;
bool FirstLotsMgm = true;
datetime BarTime = 0;
int Count82 = 0;
int init()
{
Sleep(30000);
NDigits = Digits;
if (false) ObjectsDeleteAll(); // clear the chart
CurrentLots = Lots;
Comment(""); // clear the chart
}
كود:
{
double profit = 0;
int cnt = OrdersHistoryTotal();
for (int i=cnt-1; i >= 0; i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
if ((OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNo)
{
profit = OrderProfit();
CurrentLots = OrderLots(); // take lots from the last order
break;
}
}
if (profit > 0) // had profit
{
CurrentLots = CurrentLots * LotsMpOnProfit + 0;
if (LotsResetOnProfit)
CurrentLots = Lots;
}
else if (profit < 0) // had loss
{
CurrentLots = CurrentLots * LotsMpOnLoss + 0;
if (LotsResetOnLoss) CurrentLots = Lots;
}
if (CurrentLots > MaxLots)
{
CurrentLots = Lots;
}
double lotvalue = CurrentLots;
if (lotvalue < MarketInfo(Symbol(), MODE_MINLOT)) // make sure lot is not smaller than allowed value
{
lotvalue = MarketInfo(Symbol(), MODE_MINLOT);
}
if (lotvalue > MarketInfo(Symbol(), MODE_MAXLOT)) // make sure lot is not greater than allowed value
{
lotvalue = MarketInfo(Symbol(), MODE_MAXLOT);
}
واعذرني على كثرة طلباتي مليش غير ربنا ثم أنت :asvc: والحمد لله
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
سوف تقوم بعمل داله لمعرفة عدد الصفقات المفتوحه للعمله
مثال
كود PHP:
int orderscnt(){
int cnt=0;
for(int i =0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber()){
cnt++;
}
}
}
return(cnt);
}
وطبعا سيكون الشرط
كود PHP:
if(orderscnt()<maxtrade)
ستضيف الشرط مع شروط فتح الصفقات الأخرى فلن يفتح صفقات أخرى وعندما تغلق الصفقه سينتظر تحقق الشروط
تم التعديل شكرا يا غالي:0031: