OrderOpenTime تعود بتوقيت فتح الصفقه المحدده
لذلك نستخدم OrderSelect لتحديد الصفقه أولا التي تريد معرفة الإعدادات لها
Printable View
بارك لله فيك اخي اسامة ولكن عندي مشكلة بسيطة في الاكسبيرت عندما يتحقق شرط الشراء يقوم بي فتح صفقات بيع وشراء ولايتوقف واريد استفسار عن كيفية التحم بي اعدادت المؤشر من الخارج وشكرن لك اخي اسامة
كود PHP://| DD_RABAhhh.mq4 |
//| Copyright 2005, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2005, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
extern int K_Period=5;
extern int D_Period=3;
extern int Slowing=3;
extern int StopLoss=6;
extern int TakeProfit=10;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if (iStochastic(NULL,PERIOD_M5,5,3,3,0,0,0,1)<20 && iStochastic("EURUSD",PERIOD_M5,5,3,3,0,0,0,2)>20 && OrdersTotal()==0)
double SL,TP;
{
if(StopLoss >0){SL=Ask-StopLoss *Point;}else {SL=0;}
if(TakeProfit >0){TP=Ask+TakeProfit *Point;}else {TP=0;}
}
OrderSend(Symbol(),OP_BUY,0.01,Ask,30,SL,TP,"",15000,0,Green);
if (iStochastic(NULL,PERIOD_M5,5,3,3,0,0,0,1)>80 && iStochastic("EURUSD",PERIOD_M5,5,3,3,0,0,0,2)<80 && OrdersTotal()==0)
{
if(StopLoss >0){SL=Bid+StopLoss *Point;}else {SL=0;}
if(TakeProfit >0){TP=Bid-TakeProfit *Point;}else{TP=0;}
}
OrderSend(Symbol(),OP_SELL,0.01,Bid,30,SL,TP,"",15000,0,Red);
أخي مبدع تفضل الدالة لشرط كل 20 دقيقة
void OncePer_20_Minutes()
{
int datetime800 = TimeLocal();
if (ExpectedTime1 == 0 || datetime800 > ExpectedTime1 + 60)
{
ExpectedTime1 = datetime800 + 60 * 20; // reset paused time
}
if (datetime800 >= ExpectedTime1 && datetime800 < ExpectedTime1 + 60)
{
ExpectedTime1 = datetime800 + 60 * 20;
}
}
حتستدعي الدالة بالأمر
OncePer_20_Minutes();
تحطه في قسم ستارت
حتكتب المتغير ات في بداية الأكسبيرت
int ExpectedTime1 = 0;
ومرفق الكود بالكامل لتوقيت 20 دقيقة
==========================
// exported variables
#include <stdlib.mqh>
#include <WinUser32.mqh>
// local variables
double PipValue=1; // this variable is here to support 5-digit brokers
bool Terminated = false;
string LF = "\n"; // use this in custom or utility blocks where you need line feeds
int NDigits = 4; // used mostly for NormalizeDouble in Flex type blocks
int ObjCount = 0; // count of all objects created on the chart, allows creation of objects with unique names
int current = 0;
int ExpectedTime1 = 0;
int init()
{
NDigits = Digits;
if (false) ObjectsDeleteAll(); // clear the chart
Comment(""); // clear the chart
}
// Expert start
int start()
{
if (Bars < 10)
{
Comment("Not enough bars");
return (0);
}
if (Terminated == true)
{
Comment("EA Terminated.");
return (0);
}
OnEveryTick2();
}
void OnEveryTick2()
{
if (true == false && false) PipValue = 10;
if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;
OncePer_20_Minutes();
}
void OncePer_20_Minutes()
{
int datetime800 = TimeLocal();
if (ExpectedTime1 == 0 || datetime800 > ExpectedTime1 + 60)
{
ExpectedTime1 = datetime800 + 60 * 20; // reset paused time
}
if (datetime800 >= ExpectedTime1 && datetime800 < ExpectedTime1 + 60)
{
ExpectedTime1 = datetime800 + 60 * 20;
}
}
int deinit()
{
if (false) ObjectsDeleteAll();
}
نعم سوف تستدعيها بهذا الشكل تفضل هذه الداله بعد تعديلها
كود PHP:double lastorderPassedtime(){
for(int i=OrdersHistoryTotal();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
datetime it=OrderOpenTime();
double tn=(TimeCurrent()-(it))/60;
return(tn);
}
}
}
الله يفتح عليك اخ اسامه
عندي الاكسبيرت يغلق جميع الصفقات سواء رابحه اوخاسره في نهايه الاسبوع لكن ما اريده الان هو ان كانت الصفقه رابحه لايقوم بغلقها وانما تظل مفتوحه اما الصفقات الخاسره فيقفلها نهايه الاسبوع...كيف سيكون الامر؟
إستخدامك للأقواس بشكل خاطئ
الداله الشرطيه تكتب كالآتي
فيجب أن تكتب جسد الجمله الشرطيه أو الأوامر التي ستتنفذ عند تحقق الشرط بداخل الأقواسكود PHP:if(condition)
{
////////
/////////
//////////do any thing
}
راجع الكود الذي كتبته أنت سوف تجد أنك لم تضع أوامر OrderSend بداخل الأقواس
الله يفتح عليك اخ اسامه
عندي الاكسبيرت يغلق جميع الصفقات سواء رابحه اوخاسره في نهايه الاسبوع لكن ما اريده الان هو ان كانت الصفقه رابحه لايقوم بغلقها وانما تظل مفتوحه اما الصفقات الخاسره فيقفلها نهايه الاسبوع...كيف سيكون الامر؟
في دالة إغلاق الصفقات سوف تضع شرط إذا كان الربح أقل من 0 أي الصفقه خاسره تغلق الصفقات فقط
مثال
كود PHP:void CloseLossOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol()&&OrderProfit()<0)
{
if (OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3);
}
if (OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3);
}
}
}
}