 |
 |
|
 |
|
أريد برمجة إكسبرت يقوم بالتالي
عند وضعه يقوم بفتح صفقة شراء في الشمعة الحالية و عند إغلاق الشمعة الحالية و إفتتاح شمعة جديدة يقوم بفتح صفقة بيع و عند إفتتاح شمعة جدية يفتح شراء
و هكذا كل شمعة صفقة جديدة و الصفقات عكس بعض مع إختلاف في اللوت أيضا كل صفقة جديدة يكوت اللوت الخاص بها أكبر من الصفقة السابقة
أعرف أن أمر فتح الصفقات هو
كود:
OrderSend(string symbol, int cmd, double volume, double price,int slippage, double stoploss,double takeprofit,string comment=NULL,int magic=0,datetime expiration=0,color arrow_color=clrNONE);
لكن كيف أطبق الشروط المذكورة عليه في شكل حلقة أو وضيفة أو دالة
أرجو ذكر ذالك مع شرح بالعربي أمام السطور إن أمكن ذالك
و الله يجعل مساعدتك في ميزان حسناتك |
|
 |
|
 |
،،،اهلا بك اخي الفاضل ، اولا يتم حجز هذه المتغيرات،،،
كود:
datetime time0;
bool x;
double NewLot,LastLot;
،،،ثم وضع الكود التالي في OnTick،،،
كود:
if(time0!=Time[0]){
if(x==-1){
NewLot = LastLot+0.01;
bool b = OrderSend(Symbol(),OP_BUY,NewLot,Ask,0,0,0,"",Magicnumber,0,clrBlue);
LastLot = NewLot;
x=1;
}
if(x==1){
NewLot = LastLot+0.01;
bool b = OrderSend(Symbol(),OP_SELL,NewLot,Bid,0,0,0,"",Magicnumber,0,clrRed);
LastLot = NewLot;
x=-1;
}
time0=Time[0];
}
،،،والكود يبدأ بعمل فحص لقيمة المتغير time0 اذا كان لايساوي وقت الشمعة الحالية يتم الانتقال للسطر التالي والفائدة هو منع الاكسبيرت من تنفيذ باقي الاوامر الا عند افتتاح شمعة جديدة،،،
،،،بعد ذلك يتم فحص قيمة المتغير x اذا كان يساوي -1 فمعنى ذلك ان الصفقة السابقة كانت بيع فيتم فتح شراء واذا كانت تساوي 1 فيتم فتح بيع،،،
،،،بعد ذلك يتم اسناد قيمة اللوت السابق + الزيادة التي نريدها الى المتغير NewLot وفي هذا المثال وضعت الزيادة بمقدار 0.01 ثم يتم فتح الصفقة وتخزين قيمة اللوت الجديد في المتغير LastLot،،،
،،،في النهاية يتم اسناد وقت الشمعة الحالية للمتغير time0،،،
،،،تحياتي،،،