النتائج 4,081 إلى 4,095 من 10335
الموضوع: موضوع مخصص للأسئلة البرمجية
- 28-06-2013, 08:04 PM #4081
رد:موضوع مخصص للأسئلة البرمجية
[QUOTE=zzeyani;2675552]مرحبا أيها الاصدقاء أحتج مساعدتكم على تعديل هدا السكريبت .
هو سكريبت موفينغ 5 close و open و قف الخصارة على 40 .
المشكلة هي أريده أن "لا يغلق أي الصفقات الرابحة أقل من 40 نقطة ."
هدا هو السكريبت وشرا لكم جميعا.
كود PHP://+------------------------------------------------------------------+
//| This MQL is generated by Expert Advisor Builder |
//| http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ |
//| |
//| In no event will author be liable for any damages whatsoever. |
//| Use at your own risk. |
//| |
//+------------------- DO NOT REMOVE THIS HEADER --------------------+
#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4
#property copyright "Expert Advisor Builder"
#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"
extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = True;
extern double Lots = 1.0;
extern int Slippage = 3;
extern bool UseStopLoss = True;
extern int StopLoss = 40;
extern bool UseTakeProfit = False;
extern int TakeProfit = 60;
extern bool UseTrailingStop = False;
extern int TrailingStop = 30;
int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;
if (EachTickMode) Current = 0; else Current = 1;
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;
if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;
//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+
double Buy1_1 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double Buy1_2 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_OPEN, Current + 1);
double Buy2_1 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 2);
double Buy2_2 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_OPEN, Current + 2);
double Sell1_1 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double Sell1_2 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_OPEN, Current + 1);
double Sell2_1 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 2);
double Sell2_2 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_OPEN, Current + 2);
double CloseBuy1_1 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double CloseBuy1_2 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_OPEN, Current + 1);
double CloseSell1_1 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double CloseSell1_2 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_OPEN, Current + 1);
//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+
//Check position
bool IsTrade = False;
for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
IsTrade = True;
if(OrderType() == OP_BUY) {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+
if (CloseBuy1_1 < CloseBuy1_2) Order = SIGNAL_CLOSEBUY;
//+------------------------------------------------------------------+
//| Signal End(Exit Buy) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSEBUY&&(OrderProfit()<0||OrderProfit()>=TakeProfit)&&(
(EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+
if (CloseSell1_1 > CloseSell1_2) Order = SIGNAL_CLOSESELL;
//+------------------------------------------------------------------+
//| Signal End(Exit Sell) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSESELL&&(OrderProfit()<0||OrderProfit()>=TakeProfit)&&
((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+
if (Buy1_1 > Buy1_2 && Buy2_1 <= Buy2_2) Order = SIGNAL_BUY;
if (Sell1_1 < Sell1_2 && Sell2_1 >= Sell2_2) Order = SIGNAL_SELL;
//+------------------------------------------------------------------+
//| Signal End |
//+------------------------------------------------------------------+
//Buy
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("BUY order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
} else {
Print("Error opening BUY order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
//Sell
if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("SELL order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
} else {
Print("Error opening SELL order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
if (!EachTickMode) BarCount = Bars;
return(0);
}
//+------------------------------------------------------------------+
- 28-06-2013, 09:55 PM #4082
- 28-06-2013, 11:55 PM #4083
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم ورحمة الله وبركاته
تحية طيبة للجميع على رأسهم الأستاذ الكريم مستر دولار
أريد دالة تعمل كالتالي حسب المثال كما بالصورة في حالة السوق الهابط :
في مثالنا هذا سيتم إغلاق البيع الأول مع الشراء التاني بوسطة Closeby عند مستوى البيع التاني
رسم تخطيطي توضيحي
بالمرفقات اكسبيرت الأوامر المعلقة MR.dollar_Pending Orders EA V4.6
قمت ببعض التعديلات الطفيفة لتتناسب مع فكرتي ولم يتبقى إلا جزئية الكلوز باي
كود PHP:int GetTicketNumber(int type)
{
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
{
return(OrderTicket());
}
}
return(-1);
}
void Closeby()
{
if(orderscnt(OP_BUY)>0&&orderscnt(OP_SELL)>0)
{
int ticket1=GetTicketNumber(OP_BUY);
int ticket2=GetTicketNumber(OP_SELL);
OrderCloseBy(ticket1,ticket2,Red);
}
}
void CheckOpenOrdersBuy1()
{
double profit = 0;
for (int i=OrdersTotal()-1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (true || OrderSymbol() == Symbol()&& OrderMagicNumber() == MagicNumber&&OrderType() == OP_BUY)
{
profit += OrderProfit();
}
}
}
if (profit > BuyProfit1)
{
CheckOpenOrdersSell1();
}
}
void CheckOpenOrdersSell1()
{
double profit = 0;
for (int i=OrdersTotal()-1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (true || OrderSymbol() == Symbol()&& OrderMagicNumber() == MagicNumber&&OrderType() == OP_SELL)
{
profit += OrderProfit();
}
}
}
if (profit < SellProfit1)
{
Closeby();
}
}
void CheckOpenOrdersBuy2()
{
double profit = 0;
for (int i=OrdersTotal()-1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (true || OrderSymbol() == Symbol()&& OrderMagicNumber() == MagicNumber&&OrderType() == OP_BUY)
{
profit += OrderProfit();
}
}
}
if (profit < BuyProfit1)
{
CheckOpenOrdersSell2();
}
}
void CheckOpenOrdersSell2()
{
double profit = 0;
for (int i=OrdersTotal()-1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (true || OrderSymbol() == Symbol()&& OrderMagicNumber() == MagicNumber&&OrderType() == OP_SELL)
{
profit += OrderProfit();
}
}
}
if (profit > SellProfit2)
{
Closeby();
}
}
آخر تعديل بواسطة kira-h ، 29-06-2013 الساعة 12:05 AM
- 29-06-2013, 12:22 AM #4084
- 29-06-2013, 01:14 AM #4085
- 29-06-2013, 01:24 AM #4086
- 29-06-2013, 01:28 AM #4087
- 29-06-2013, 01:46 AM #4088
لم تفهمني يا أخي .
الصفقات الخسرة تغلق على 40 نقطة خاسرة.
أما الصفقات الرابحة تغلق على تقاطع الموفينغ و تغلق على أكتر من 40 نقطة رابحة.
- 29-06-2013, 01:48 AM #4089
لم تفهمني يا أخي .
الصفقات الخسرة تغلق على 40 نقطة خاسرة.
أما الصفقات الرابحة تغلق على تقاطع الموفينغ و تغلق على أكتر من 40 نقطة رابحة.
الون الاحمر هو المراد بروجته
- 29-06-2013, 01:49 AM #4090
- 29-06-2013, 01:58 AM #4091
جرب باك تست ثم اشرح على برنت الباك تست ما تريد .
- 29-06-2013, 12:50 PM #4092
جزاك الله خيرا أ. جميل
لكن هذه الطريقة خارجة عن الفكرة ! ماذا عن السوق الصاعد حيث البيع يغلق الشراء؟ ماذا عن الاغلاق كلوزباي على ربح؟ يعني سواء السوق صاعد أو هابط لابد من إغلاق مثلا شراء رابح ربحه أكبر من خسارة البيع أو بيع ربحه أكبر من خسارة الشراء! ودائما الاجمالي عند الاغلاق ربح
نفرض مثلا حسب الصورة أسفلة
السعر وصل لمستوى البيع التاني والنتائج كالتالي :
صفقة الشراء1 محققة خسارة 100- نقطة
صفقة البيع 1 محقق محقق ربح +70 نقطة
صفقة الشراء 2 محقق خسارة -30 نقطة
وبمجرد تفعيل صفقة البيع2 يتم إغلاق البيع 1 مع الشراء2 بالكلوزباي
إجمالي الربح :
70-30=+40
ونخصم منها سبريد صفقة واحدة (-2) لأن الاغلاق تم بالـ closeby وبالتالي الربح الاجمالي بهذا الاغلاق +38 نقطة
إذن في كل الاغلاقات سواء صاعد أو هابط دائما نخرج بربح +38 نقطة
أرجو أن تكون الفكرة وضحتآخر تعديل بواسطة kira-h ، 29-06-2013 الساعة 01:01 PM
- 29-06-2013, 03:14 PM #4093
اخي حسن لاتعقد السهل ، اولا مثالك كان عن حالة الهبوط وبالتالي ردي سيكون عن الهبوط ولك ان تقيس عليها حالة الصعود وتعدل .
عندما تصل الى البيع الثاني سيكون قبلها عملية شراء ثم بيع ثم شراء والعمليات الثلاث سبقت البيع الثاني في توقيتها ، اذا مباشرة بداخل دالة البيع سنعطي أمر اغلاق للبيع الأول + اغلاق للشراء الثاني وسيتم التفريق بين الشراء الأول والشراء الثاني عن طريق توقيت افتتاح الصفقة ومقارنته مع افتتاح البيع الأول ، فالشراء الأول سبق البيع الأول والشراء الثاني كان بعد البيع الأول .
السؤال ماذا عن الشراء الأول هل ستتركه بدون اغلاق ؟؟؟
- 30-06-2013, 02:48 AM #4094
آخر تعديل بواسطة kira-h ، 30-06-2013 الساعة 02:51 AM
- 30-06-2013, 05:22 AM #4095
المواضيع المتشابهه
-
موضوع مخصص للاكسبيرتات اللتي يستخدمها الاعضاء على الحقيقي,,عندك اكسبيرت ممتاز ضعه هنا
By محمد معمو in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EAمشاركات: 11آخر مشاركة: 15-12-2023, 02:03 PM -
عااااااااااااجل ( موضوع مخصص للفرص الفورية)!!!
By عاشق الذبذبـة in forum توقعات وتوصيات سوق العملاتمشاركات: 280آخر مشاركة: 27-08-2009, 10:30 PM