السلام عليكم استاذى الكريم
وشكرا على المساعدة الكريمة
ان شاء الله
اشوف هذا الشرح
ومنتظرك فى الشرح التوضيحى منك
تحياتى وتقديرى لك
Printable View
شكرا استاذ اسامة واستاذ جميل على المساعدة
تمام أستاذ أسامه و جزاك الله خيرا .. سأجرب الحل الأول ..
أنا أستخدم داله لحساب اللوت
هل أضع الكود بداخلها أم مع الشروط هكذاكود PHP:
double new(){
double newLot;
double A=orderscnt(OP_BUY)+orderscnt(OP_SELL);
if(A==1)newLot=Lot2;
if(A==2)newLot=Lot3;
if(A==3)newLot=Lot4;
if(A==4)newLot=Lot5;
if(A==5)newLot=Lot6;
if(A==6)newLot=Lot7;
if(A==7)newLot=Lot8;
if(A==8)newLot=Lot9;
if(A==9)newLot=Lot10;
if(A==10)newLot=Lot11;
if(A==11)newLot=Lot12;
if(A==12)newLot=Lot13;
if(A==13)newLot=Lot14;
if(A==14)newLot=Lot15;
return(newLot);
}
لأني جربت الإثنين والمشكله كما هي ..كود PHP:
if(orderscnt(OP_BUY)>=1 && PendingOrders(OP_SELLSTOP)+PendingOrders(OP_BUYSTOP)==0 && last_type==OP_BUY )
{
TP=s-(TakeProfit*point);
SL=s+(StopLoss*point)+spr;
if(newLot>MarketInfo(Symbol(),MODE_MAXLOT))newLot=MarketInfo(Symbol(),MODE_MAXLOT);
OrderSend(Symbol(),OP_SELLSTOP,new(),s,3*Q,SL,TP,"dentist_hussein EA",MagicNumber,0,Red);
}
////////////////////////
if
while(orderscnt(OP_SELL)>=1 && PendingOrders(OP_BUYSTOP)+PendingOrders(OP_SELLSTOP)==0 && last_type==OP_SELL )
{
TP=b+(TakeProfit*point);
SL=b-(StopLoss*point)-spr;
if(newLot>MarketInfo(Symbol(),MODE_MAXLOT))newLot=MarketInfo(Symbol(),MODE_MAXLOT);
OrderSend(Symbol(),OP_BUYSTOP,new(),b,3*Q,SL,TP,"dentist_hussein EA",MagicNumber,0,Blue);
}
وجزاك الله حيرا .
لاحظ يا دكتور إنك في أوردر سيند إستدعيت حجم اللوت من الدالة lot()
وبالتالي يجب وضع الشرط في دالة اللوت
ويجب أن تكون في نهاية الدالة بالشكل ده
كود PHP:
double new(){
double newLot;
double A=orderscnt(OP_BUY)+orderscnt(OP_SELL);
if(A==1)newLot=Lot2;
if(A==2)newLot=Lot3;
if(A==3)newLot=Lot4;
if(A==4)newLot=Lot5;
if(A==5)newLot=Lot6;
if(A==6)newLot=Lot7;
if(A==7)newLot=Lot8;
if(A==8)newLot=Lot9;
if(A==9)newLot=Lot10;
if(A==10)newLot=Lot11;
if(A==11)newLot=Lot12;
if(A==12)newLot=Lot13;
if(A==13)newLot=Lot14;
if(A==14)newLot=Lot15;
if(newLot>MarketInfo(Symbol(),MODE_MAXLOT))newLot=MarketInfo(Symbol(),MODE_MAXLOT);
return(newLot);
}
السلام عليكم ورحمة الله وبركاته
كيف حالك أستاذنا الغالي أسامة والاخ الاستاذ جميل والحمدلله على السلامة الاستاذ يوسف
عندي سؤال أعتقد انه بسيط لكني مش عارف اوصل للمنطق البرمجي:
السؤال
لو فرضنا عندي الاكسبييرت يضع الماجيك نمبر لكل زوج يتاجر به بشكل اوتوماتيكي ولنفرض وضعناه على زوج اليورو دولار وكان الماجيك نمبر = 1 وايضا على زوج الباوند دولار وكان الماجيك نمبر = 2
فكيف أفرض على الاكسبيرت اذا دخل صفقة على أحد الزوجين بأن لايدخل على الزوج الآخر طالما هناك عملية مفتوحة وهو من قام بفتحها وليس المستخدم؟
وبارك الله في جهودكم جميعا.
وعليكم السلام ورحمة الله
تفضل ضيف هذه الدالة ثم جرب بعد افتتاح السوق بوضع الأكسبيرت على الشارتين .
كود PHP:
int orderscnt(){
int cnt=0;
for(int i =0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderType()==OP_SELL||OrderType()==OP_BUY){
cnt++;
}
}
}
return(cnt);
}
في حلول أخرى للتعرف على العمليات المفتوحة بواسطة الإكسبيرت .. أعتقد أسهلها هو التعرف على الأوردرات عن طريق الكومنت
ستقوم بتعريف متغير نصي خارجي مثلا
وتجعل comment في كل أوامر البيع والشراء بالشكل ده مثلاكود PHP:
extern string comment="Autotarde";
وتقوم بعمل دالة تبحث عن عدد العمليات المفتوحة والتي يوجد بها نفس الكومنتكود PHP:
OrderSend(Symbol(),OP_BUY,Lots,Ask,3*Q,0,0,comment,MagicNumber,0,Blue);
وتضع في شروط البيع والشراء بأن يكون الناتج العائد من الدالة <1كود PHP:
int AutoOrders(){
int cnt=0;
for(int i =0;i<=OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderComment()==comment){
cnt++;
}
}
return(cnt);
}
كود PHP:
if(AutoOrders()<1 && إلخ)//Buy
if(AutoOrders()<1 && إلخ)//Sell
بارك الله بكم جميع يبدو اني توصلت للحل المنطقي ويلي كان سهل جدا
اولا جميع ارقام الماجيك نمبر يجب ان تخزن في مصفوفة خاصة بالماجيك نمبر للازواج التي يتم العمل عليها بعدين نفس الكود يلي أرفقو الاستاذ جميل مع إضافة حلقة لمصفوفة الماجيك نمبر فاذا كان الامر المفتوح يحمل رقم يساوي أحد ارقام المصفوفة فاذا هذا الامر مفتوح من قبل الاكسبيرت وعلى هذا الاساس لن يفتح اي امر جديد في الازواج الاخرى
بارك الله بكم جميعا أساتذتنا
إما أن تستخدم الشرط بداخل الكود كما شرحها الأخ xcv في المشاركه السابقه
أو أن تضعها مع الأوامر و تجعل الأوامر
كود PHP:
if(new()>MarketInfo(Symbol(),MODE_MAXLOT))newLot=MarketInfo(Symbol(),MODE_MAXLOT);
else newLot=new();
OrderSend(Symbol(),OP_SELLSTOP,newLot,s,3*Q,SL,TP,"dentist_hussein EA",MagicNumber,0,Red);