رد:موضوع مخصص للأسئلة البرمجية
هل هذه الدالة صحيحة
هي تحسب عدد الاوامر سل ستوب SELL Stop
كود PHP:
// number of pending sell stop
int ordersSellStop(){
int cnt=0;
for(int i =0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol() && magic==OrderMagicNumber()||OrderMagicNumber()==magic&&OrderType() == OP_SELLSTOP){
cnt++;
}
}
}
return(cnt);
}
واذا كان لا ما هي الداالة الصحيحة
وشكرا لكم مسبقا
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة Learn4X
هل هذه الدالة صحيحة
هي تحسب عدد الاوامر سل ستوب SELL Stop
كود PHP:
// number of pending sell stop
int ordersSellStop(){
int cnt=0;
for(int i =0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol() && magic==OrderMagicNumber()||OrderMagicNumber()==magic&&OrderType() == OP_SELLSTOP){
cnt++;
}
}
}
return(cnt);
}
واذا كان لا ما هي الداالة الصحيحة
وشكرا لكم مسبقا
كود PHP:
[PHP]
int ordersSellStop()
{
int cnt=0;
for(int i =0;i<OrdersTotal();i++)
{
int type=OrderType();
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(type==OP_SELLSTOP)
{
cnt++ ;
}
}
return(cnt);
}
[/PHP]
لما اغير في اكوادك ولكن بدل من ان يقارن الماجيك نمبر ونوع العملة جعلته بسيط للتوضيح فقط لك
فقط ضعه في اسكريبت وافتح عدد من العقود المعلقة باي استوب وسيل استوب وسيل ليميت وباي ليمت وضع استدعاي للدالة في comment
وراقب النتيجة على الشارت وغير ما تريد بشيئ جديد حتى تبني ملاحظاتك وتتوصل الى شيئ جديد
لكن اعتقد ان الاكواد التي انت افقتها مأخوذه من اكسبيرت وتريد التأكد منها صحيح ؟ فان كان صحيح فلا تعتمد على تفكير غيرك حاول ان تبني برنامج بنفسك دون أخذ ولصق من أكواد الاخرين لان المبرمج لابد ان يبني برنامجة معتمدا على تفكيره
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة توفيق
استاد ماستر دولار كيف يمكنني تحديد اخر صفقة مفتوحة و تغيير الستوب الوز لها
بارك الله فيك
هذه دالة لتعديل هدف وستوب آخر صفقة شراء وقس عليها في البيع ، وضعت لك علامة ؟؟؟ هنا تضع مايناسب اكسبيرتك .
كود PHP:
void BuyOrderModify()
{
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == ?????)
{
double price = Ask;
if (true == false)
{
price = OrderOpenPrice();
}
bool ret = OrderModify(OrderTicket(), OrderOpenPrice(), price - BuyStoploss*?????, price + BuyTakeprofit*????, 0, White);
if (ret == false)
Print("OrderModify() error - ", ErrorDescription(GetLastError()));
}
}
}
وطبعا في المتغيرات في بداية الأكسبيرت تكون وضعت المتغيرين
كود PHP:
extern int BuyStoploss = 20;
extern int BuyTakeprofit = 30;
وفي دالة ستارت تضع استدعاء دالة مودفاي
كود PHP:
BuyOrderModify();
ستحتاج رسائل الأخطاء و لتشغيلها ستضيف في بداية الأكسبيرت كود تعيين الخطاء
كود PHP:
#include <stdlib.mqh>
#include <WinUser32.mqh>
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة wadi2012
كود PHP:
int ordersSellStop()
{
int cnt=0;
for(int i =0;i<OrdersTotal();i++)
{
int type=OrderType();
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(type==OP_SELLSTOP)
{
cnt++ ;
}
}
return(cnt);
}
لما اغير في اكوادك ولكن بدل من ان يقارن الماجيك نمبر ونوع العملة جعلته بسيط للتوضيح فقط لك
فقط ضعه في اسكريبت وافتح عدد من العقود المعلقة باي استوب وسيل استوب وسيل ليميت وباي ليمت وضع استدعاي للدالة في comment
وراقب النتيجة على الشارت وغير ما تريد بشيئ جديد حتى تبني ملاحظاتك وتتوصل الى شيئ جديد
لكن اعتقد ان الاكواد التي انت افقتها مأخوذه من اكسبيرت وتريد التأكد منها صحيح ؟ فان كان صحيح فلا تعتمد على تفكير غيرك حاول ان تبني برنامج بنفسك دون أخذ ولصق من أكواد الاخرين لان المبرمج لابد ان يبني برنامجة معتمدا على تفكيره
شكرا جزيلا لك
انا بالفعل اخذت الكود من اكسبيرت اخر
وحاليا اقوم بالعمل على اول اكسبيرت ابرمجه
بالنسبة لفحص شرط وجود سيل ستوب ينتظر حتى يتفعل او يغلق لكي يتم تعليق امر جديد
هل يكفي وضع شرط التحقق في دالة start لكي يبقى الشرط متحققا ام ان هناك
دالة من نوع تكراري ؟
وشكرا جزيلا لك مرة أخرى
وجزاك الله كل خير
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة Learn4X
وكيف اجعل الاكسبيرت يعلق فقط صفقة واحدة الا اذا تم تفعيل المعلقة او لم يجد صفقات سل ستوب معلقة ان يقوم بتعليق واحدة ؟؟
وبنفس الوقت اريده ان يقوم بالتحقق من هذا الشرط كل لحظة او(يجعل هذا الشرط متحققا على طول)
وشكرا مرة اخرى
الدالة سليمة وكان بأمكانك استخدامها للبيع والشراء بدل تثبيتها سل ستوب ، فقط ينقصك اضافة الكود الى الشروط التي انت وضعتها لتعليق الأوردر وتضعه في دالة ستارت والكود هو :
كود PHP:
if(ordersSellStop()<1) && ?????
وتضع باقي شروطك في مكان الأستفهام ؟؟؟؟؟
رد:موضوع مخصص للأسئلة البرمجية
قمت بعمل دالة
تقوم بالتالي
ارجاع قيمة سعر الافتتاح للصفقة للعملة الحالية المفتوحة سواء كانت شراء او بيع
كود PHP:
double openedPosPrice(){
double openprice;
if (ordersCount(OP_BUY) > 0 || ordersCount(OP_SELL)> 0){
for(int i =0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() &&OrderType()<2){
openprice = OrderOpenPrice();
}
}
return(openprice);
}
}
الرجاء ارشادي الى ما الخطأ فيها ؟
وشكرا لكم
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة Learn4X
قمت بعمل دالة
تقوم بالتالي
ارجاع قيمة سعر الافتتاح للصفقة للعملة الحالية المفتوحة سواء كانت شراء او بيع
كود PHP:
double openedPosPrice(){
double openprice;
if (ordersCount(OP_BUY) > 0 || ordersCount(OP_SELL)> 0){
for(int i =0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() &&OrderType()<2){
openprice = OrderOpenPrice();
}
}
return(openprice);
}
}
الرجاء ارشادي الى ما الخطأ فيها ؟
وشكرا لكم
لا يوجد خطأ الداله صحيحه
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة kira-h
شكرا جزيلا على تفاعلك أستاذي العزيز ربنا يخليك :asvc:
الطريقة بسيطة جدا
أسماء الخطوط H1 ; H2 ; H 3 .... إلى H20
وأيضا L1 ; L2 . L3 ....إلى L20
ثم خط الوسط باسم N
حينما يلمس السعر أي خط من الخطوط دي يضع أمرين معلقين باي ستوب فوق الخط وسيل ستوب تحت الخط
بالنسبة للاكسبيرت الان يضع فقط أمرين بالخط الوسط N وعندما يصعد السعر ويلمس مثلا H1 لا يضع أمرين بنفس الطريقة ...
مع أن عدد العقود غير محدود
دي المشكلة !!!
إستخدم الأمر coment أو print لعرض أسعار الخطوط على الشارت
كود PHP:
for( i=1;i<=20;i++)
{
double LineL=ObjectGet("Li"+i,OBJPROP_PRICE1);
Print(LineL);
حتى تتأكد من أن الخطأ ليس من كود إستدعاء قيم المؤشر ثم تابع باقي أجزاء الكود
بالنسبه لطريقة إستدعاء الخطوط فهي صحيحه لا توجد بها مشاكل لذلك غالبا الخطأ في جزء آخر من الكود
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
إستخدم الأمر coment أو print لعرض أسعار الخطوط على الشارت
كود PHP:
for( i=1;i<=20;i++)
{
double LineL=ObjectGet("Li"+i,OBJPROP_PRICE1);
Print(LineL);
حتى تتأكد من أن الخطأ ليس من كود إستدعاء قيم المؤشر ثم تابع باقي أجزاء الكود
بالنسبه لطريقة إستدعاء الخطوط فهي صحيحه لا توجد بها مشاكل لذلك غالبا الخطأ في جزء آخر من الكود
بارك الله فيك أستاذي الكريم
للأسف لم تظهر أسعار الخطوط على الشارت
والأسعار بالباكتيست تظهر فقط لمرة واحدة وهي خاصة بالمؤشر
كل ما أريده من الاكسبيرت أن يضع أمرين BuyStop و SellStop بالخط بمجرد أن يلمسه السعر وهكذا في كل ملامسة لأي خط من خطوط المؤشر
المشكلة أنه يضع فقط بخط الوسط N أما باقي الخطوط لا يضع الأمرين
مؤشر الخطوط بالمرفقات للمراجعة :asvc:
كود لجزء من الشروط لخطوط H
كود PHP:
void OncePerBar()
{
if (BarTime < Time[0])
{
// we have a new bar opened
BarTime = Time[0]; // keep the new bar open time
TechnicalAnalysis();
}
}
void TechnicalAnalysis()
{
for(int i=1;i<=20;i++)
{
double LineH=ObjectGet("Hi"+i,OBJPROP_PRICE1);
Print(LineH);
if ((Open[1]<=LineH&&Close[1]>=LineH) || (Open[1]>=LineH&&Close[1]<=LineH))
{
LimitOpenOrders();
}
}
}
void LimitOpenOrders()
{
int count = 0;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol())
if (OrderMagicNumber() == MagicNo)
{
count++;
}
}
else
{
Print("OrderSend() error - ", ErrorDescription(GetLastError()));
}
if (count < OpenOrdersLimit)
{
IfOrderDoesNotExist1();
IfOrderDoesNotExist2();
}
}
void IfOrderDoesNotExist1()
{
bool exists = false;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() != MagicNo)
{
exists = true;
}
}
else
{
Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
}
if (exists == false)
{
SellOrderH();
}
}
void IfOrderDoesNotExist2()
{
bool exists = false;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() != MagicNo)
{
exists = true;
}
}
else
{
Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
}
if (exists == false)
{
BuyOrderH();
}
}
ثم دالة الشراء والبيع المعلقين
كود PHP:
void BuyOrderH()
{
for( int i=1;i<=20;i++)
{
double LineH=ObjectGet("Hi"+i,OBJPROP_PRICE1);
Print(LineH);
double price = (NormalizeDouble(LineH, NDigits) + (SellStep*PipValue*Point));
double SL = price - Stoploss*PipValue*Point;
if (Stoploss == 0) SL = 0;
double TP = price + Takeprofit*PipValue*Point;
if (Takeprofit == 0) TP = 0;
int Tries;
int ticket = -1;
if (ECNBroker)
{
ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, 0, 0, "Kira-h", MagicNo, 0, Blue);
if(ticket>-1 && Tries<10)
{
OrderSelect(ticket, SELECT_BY_TICKET);
OrderModify(ticket, OrderOpenPrice(), SL, TP, 0, Blue);
Tries++;Sleep(1000);
}
}
else
ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, "Kira-h", MagicNo, 0, Blue);
}
}
void SellOrderH()
{
for( int i=1;i<=20;i++)
{
double LineH=ObjectGet("Hi"+i,OBJPROP_PRICE1);
Print(LineH);
double price = (NormalizeDouble(LineH, NDigits) - (SellStep*PipValue*Point));
double SL = price + Stoploss*PipValue*Point;
if (Stoploss == 0) SL = 0;
double TP = price - Takeprofit*PipValue*Point;
if (Takeprofit == 0) TP = 0;
int Tries;
int ticket = -1;
if (ECNBroker)
{
ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, price, Slippage, 0, 0, "Kira-h", MagicNo, 0, Red);
if(ticket>-1 && Tries<10)
{
OrderSelect(ticket, SELECT_BY_TICKET);
OrderModify(ticket, OrderOpenPrice(), SL, TP, 0, Blue);
Tries++;Sleep(1000);
}
}
else
ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, Bid, Slippage, SL, TP, "Kira-h", MagicNo, 0, Red);
}
}
أيضا هل الدالة صحيحة لاستخراج الربح الاجمالي والخسارة الاجمالية
بالنقاط للصفقات المفعلة ؟؟؟
كود PHP:
extern int TotalProfitPips=30;
extern int TotalLossPips=99999;
كود PHP:
void CheckPipsProfit()
{
double TT,W;
for(int i=OrdersTotal()-1; i >= 0; i--)
{
OrderSelect(i, SELECT_BY_POS,MODE_TRADES);
{
if(OrderType()==OP_BUY)
{
W=((MarketInfo(OrderSymbol(),MODE_BID)-OrderOpenPrice())/MarketInfo(OrderSymbol(),MODE_POINT));
if (Point==0.00001 || Point==0.001) W=((MarketInfo(OrderSymbol(),MODE_BID)-OrderOpenPrice())/MarketInfo(OrderSymbol(),MODE_POINT))/10;
TT=TT+W;
}
else if(OrderType()==OP_SELL)
{
W=((OrderOpenPrice()-MarketInfo(OrderSymbol(),MODE_ASK))/MarketInfo(OrderSymbol(),MODE_POINT));
if (Point==0.00001 || Point==0.001) W=((OrderOpenPrice()-MarketInfo(OrderSymbol(),MODE_ASK))/MarketInfo(OrderSymbol(),MODE_POINT))/10;
TT=TT+W;
}
}
}
Comment("Profit= ",TT);
while(OrdersTotal()>0 && ((TT>=TotalProfitPips) || (TT<=(TotalLossPips*(-1)))))
{
for(i=OrdersTotal()-1; i >= 0; i--)
{
OrderSelect(i, SELECT_BY_POS,MODE_TRADES);
if (OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),Slippage);
else if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),Slippage);
else OrderDelete(OrderTicket());
}
}
}
بانتظارك أستاذي الغالي :eh_s(7):
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم ورحمة الله
كنت حابب اعرف الكود البرمجي اللازم لعمل اكسبرت من اختراق عدد 2 مؤشر بولينجر كالتالي :
أن يكون السعر قد اخترق مؤشر البولينجر الأول الخط الأعلي له
عند ملامسة السعر للخط الأعلي لمؤشر البولينجر الثاني والذي يكون دائما أعلى المؤشر الأول علشان Deviation أكبر منه لان الأول 2 والثاني 3 الدخول بيع شرط أن يكون مؤشر cci اعلىمن 100
عند ملامسة السعر للخط السفلي لمؤشر البولينجر الثاني والذي يكون دائما أسفل المؤشر الأول علشان Deviation أكبر منه لان الأول 2 والثاني 3 الدخول شراء شرط مؤشر cci أقل من - 100
عدم فتح أي صفقات لنفس العملة طالما توجد صفقات فعالة
يا ريت من الأخوة المبرمجين المساعدده في كيفية التعامل مع المؤشرات وتفعيل صفقات البيع والشراء من خلال اختراق أو ملامسة أحد هذه الخطوط للمؤشراء سواء أكانت مؤشرات داخل الميتاتريدر أو مؤشر خارجي يرسم خطوط
جزاكم الله خيرا