النتائج 1 إلى 11 من 11
الموضوع: تلميذك توقف هنا مستر دولار؟؟؟
- 07-12-2011, 04:49 PM #1
تلميذك توقف هنا مستر دولار؟؟؟
السلام عليكم
الاخ مستر دولار تابعت شروحاتك لكيفيت عمل اكسبيرت والحمد لله استفدت كثيرا لك الف شكر
لكن للاسف توقفت عند امرين وجد نفسي عاجزا على كتابتهم
الاول =(اذا تحقق الشرط افتح طلب شراء + 4 طلبات شراء معلقة )
الثاني=(اذا تم اخذ التك بروفت لاي طلب اغلق باقي الطلبات)
كود PHP://+------------------------------------------------------------------+
//| v_v.mq4 |
//| Copyright © 2011, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
//================================//
extern int magic = 8945;
extern int slipage = 3;
//--------------------------------//
extern int MA_Shift = 0;
extern int MA_Period = 25;
//--------------------------------//
extern int Step =50;
extern double Lots = 0.01;
//--------------------------------//
extern double StopLoss = 50;
extern double TakeProfit = 50;
//================================//
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double ma_h,ma_l;
//------------------- --------------------//
ma_h=iMA(NULL,0,MA_Period,MA_Shift,MODE_SMMA,PRICE_HIGH,0);
ma_l=iMA(NULL,0,MA_Period,MA_Shift,MODE_SMMA,PRICE_LOW,0);
//=============================================================//
if( Bid>( ma_h+(Step*Point) ) && OrdersTotal()==0 )
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,slipage,Bid+StopLoss*Point,Bid-TakeProfit*Point,"thank",magic,0,Green);//&&
//OrderSend(Symbol(),OP_SELLLIMIT,Lots*2,Bid+50pip,slipage,Bid+StopLoss*Point*2,Bid,"thank",magic,0,Green);//&&
//OrderSend(Symbol(),OP_SELLLIMIT,Lots*4,Bid+100pip,slipage,Bid+StopLoss*Point*3,Bid+TakeProfit*Point,"thank",magic,0,Green);//&&
//OrderSend(Symbol(),OP_SELLLIMIT,Lots*8,Bid+150pip,slipage,Bid+StopLoss*Point*4,Bid+TakeProfit*Point*2,"thank",magic,0,Green);//&&
//OrderSend(Symbol(),OP_SELLLIMIT,Lots*16,Bid+200pip,slipage,Bid+StopLoss*Point*5,Bid-TakeProfit*Point*3,"thank",magic,0,Green);//&&
}
//---------------------------------------------------------//
//if(اذا تم اخذ التك بروفيت للطلب الاول او الثاني او اي طلب اغلق باقي الطلبات)
//-------------------------------------------------------------//
if( Ask<( ma_l-(Step*Point) )&& OrdersTotal()==0 )
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,slipage,Ask-StopLoss*Point,Ask+TakeProfit*Point,"thank",magic,0,Red);
}
//الذي اظفناه فوق للبيع نظيفه هنا للشراء
//=============================================================//
}
- 08-12-2011, 03:51 PM #2
.
- 08-12-2011, 08:32 PM #3
وعليكم السلام ورحمة الله وبركاته
بالنسبه للجزء الأول
فأنت كتبت الأمر بشكل صحيح
كود PHP:OrderSend(Symbol(),OP_SELLLIMIT,Lots*2,Bid+50pip,slipage,Bid+StopLoss*Point*2,Bid,"thank",magic,0,Green);//&&
OrderSend(Symbol(),OP_SELLLIMIT,Lots*4,Bid+100pip,slipage,Bid+StopLoss*Point*3,Bid+TakeProfit*Point,"thank",magic,0,Green);//&&
OrderSend(Symbol(),OP_SELLLIMIT,Lots*8,Bid+150pip,slipage,Bid+StopLoss*Point*4,Bid+TakeProfit*Point*2,"thank",magic,0,Green);//&&
OrderSend(Symbol(),OP_SELLLIMIT,Lots*16,Bid+200pip,slipage,Bid+StopLoss*Point*5,Bid-TakeProfit*Point*3,"thank",magic,0,Green);//&&
فمثلا سعر البيع سوف يصبح كالآتي مثلا لنأخذ أول أمر معلق
كود PHP:Bid+50*Point
كود PHP:Bid+50*Point+StopLoss*Point
كود PHP:Bid+50*Point-TakeProfit*Point
- 08-12-2011, 08:36 PM #4
بالنسبه للجزء الثاني
فسوف تحتاج أولا لعمل داله لحذف وإغلاق باقي الصفقات سوف تقوم بتعريفها خارج الداله start
كود PHP:void CloseOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),30);
}
if(OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),30);
}
if(OrderType()>OP_SELL)OrderDelete(OrderTicket());
}
}
فتضع شرح إذا كان عدد الأوامر المفتوحه أقل من 5 فهذا يعني أن هناك صفقة أغلقت إذا أغلق باقي الصفقات
فتكون
كود PHP:if(OrdersTotal()<5)CloseOrders();
- 09-12-2011, 07:09 PM #5
شكرا لاهتامك استاذنا الكريم
ولكن
if(OrdersTotal()<5)CloseOrders();
بعد التجربة وجدت ان الامر يقفل الطلبات المعلقة اذا اقفل السعر الطلب الاول مرورا بالتك بروفت او الستوب لوز
وهكذا لم نستفد شيء من الطلبات المعلقة اي انها ستقفل بمجرد قفل الطلب الاول بربح او خسارة
المطلوب اخي الكريم
ان يكون اقفال الطلبات متزامن مع اختراق السعر للتك بروفت حصرا
اي اذا تم فتح طلب بيع مباشر و4 طلبات معلقة
اذا استمر السعر بالارتفاع فانه سيغلق الطلبات واحد تلو الاخر بمجرد المرور على الستب لوز وهنا نريد له الاستمرار اي ندعه
اما اذا ارتد السعر هبوطا من اي طلب واخترق التك بروفت )اغلق باقي الطلبات
ارجو ان اكون وظحت لك الامر
لك الف شكر............
- 10-12-2011, 12:23 AM #6
.
- 10-12-2011, 01:33 AM #7
بالتالي سوف تحتاج إلى وضع شرط إضافي لمعرفة هل آخر صفقة حققت الهدف أم لا
فيمكنك عمل دالة لمعرفة آخر صفقه هل أغلقت على ربح أم لا
كود PHP:bool LastOrderProfit(){
for(int i=OrdersHistoryTotal();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
if(OrderProfit()>0)return(true);
else return(false);
}
}
return(true);
}
كود PHP:if(OrdersTotal()<5&&LastOrderProfit())CloseOrders();
- 10-12-2011, 07:02 PM #8
اخي الكريم
وظعت الشرط الثاني
ولكن عندما اظغط على Compile يخبرني بوجود خطء MagicNumber
ارجو منك ان تلقي نظرة عليه وتصحح الخطء
جزاك الله الف خير
[PHP]//================================//
extern int magic = 8945;
extern int slipage = 3;
//--------------------------------//
extern int MA_Shift = 0;
extern int MA_Period = 25;
//--------------------------------//
extern int Step =50;
extern double Lots = 0.01;
//--------------------------------//
extern double StopLoss = 50;
extern double TakeProfit = 50;
//================================//
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//===//
double ma_h,ma_l;
//------------------- --------------------//
ma_h=iMA(NULL,0,MA_Period,MA_Shift,MODE_SMMA,PRICE _HIGH,0);
ma_l=iMA(NULL,0,MA_Period,MA_Shift,MODE_SMMA,PRICE _LOW,0);
//================================================== ===========//
if( Bid>( ma_h+(Step*Point) ) && OrdersTotal()==0 )
{
//===//
OrderSend(Symbol(),OP_SELL ,Lots ,Bid ,slipage,Bid+(StopLoss*Point) ,Bid-(TakeProfit*Point) ,"thank",magic,0,Red);
OrderSend(Symbol(),OP_SELLLIMIT,Lots*( 2),Bid+(StopLoss*Point) ,slipage,Bid+(StopLoss*Point)* 2,Bid ,"thank",magic,0,Red);
OrderSend(Symbol(),OP_SELLLIMIT,Lots*( 3),Bid+(StopLoss*Point)*2,slipage,Bid+(StopLoss*Po int)* 3,Bid+(TakeProfit*Point) ,"thank",magic,0,Red);
OrderSend(Symbol(),OP_SELLLIMIT,Lots*( 4),Bid+(StopLoss*Point)*3,slipage,Bid+(StopLoss*Po int)* 4,Bid+(TakeProfit*Point)*2,"thank",magic,0,Red);
OrderSend(Symbol(),OP_SELLLIMIT,Lots*( 5),Bid+(StopLoss*Point)*4,slipage,Bid+(StopLoss*Po int)* 5,Bid+(TakeProfit*Point)*3,"thank",magic,0,Red);
OrderSend(Symbol(),OP_SELLLIMIT,Lots*( 6),Bid+(StopLoss*Point)*5,slipage,Bid+(StopLoss*Po int)* 6,Bid+(TakeProfit*Point)*4,"thank",magic,0,Red);
OrderSend(Symbol(),OP_SELLLIMIT,Lots*( 7),Bid+(StopLoss*Point)*6,slipage,Bid+(StopLoss*Po int)* 7,Bid+(TakeProfit*Point)*5,"thank",magic,0,Red);
OrderSend(Symbol(),OP_SELLLIMIT,Lots*( 8),Bid+(StopLoss*Point)*7,slipage,Bid+(StopLoss*Po int)* 8,Bid+(TakeProfit*Point)*6,"thank",magic,0,Red);
OrderSend(Symbol(),OP_SELLLIMIT,Lots*( 9),Bid+(StopLoss*Point)*8,slipage,Bid+(StopLoss*Po int)* 9,Bid+(TakeProfit*Point)*7,"thank",magic,0,Red);
OrderSend(Symbol(),OP_SELLLIMIT,Lots*(10),Bid+(Sto pLoss*Point)*9,slipage,Bid+(StopLoss*Point)*10,Bid +(TakeProfit*Point)*8,"thank",magic,0,Red);
//===//
}
//-------------------------------------------------------------//
//================================================== ===========//
if( Ask<( ma_l-(Step*Point) )&& OrdersTotal()==0 )
{
//===//
OrderSend(Symbol(),OP_BUY ,Lots ,Ask ,slipage,Ask-(StopLoss*Point) ,Ask+(TakeProfit*Point) ,"thank",magic,0,Blue);
OrderSend(Symbol(),OP_BUYLIMIT,Lots*( 2),Ask-(StopLoss*Point) ,slipage,Ask-(StopLoss*Point)* 2,Ask ,"thank",magic,0,Blue);
OrderSend(Symbol(),OP_BUYLIMIT,Lots*( 3),Ask-(StopLoss*Point)*2,slipage,Ask-(StopLoss*Point)* 3,Ask-(TakeProfit*Point) ,"thank",magic,0,Blue);
OrderSend(Symbol(),OP_BUYLIMIT,Lots*( 4),Ask-(StopLoss*Point)*3,slipage,Ask-(StopLoss*Point)* 4,Ask-(TakeProfit*Point)*2,"thank",magic,0,Blue);
OrderSend(Symbol(),OP_BUYLIMIT,Lots*( 5),Ask-(StopLoss*Point)*4,slipage,Ask-(StopLoss*Point)* 5,Ask-(TakeProfit*Point)*3,"thank",magic,0,Blue);
OrderSend(Symbol(),OP_BUYLIMIT,Lots*( 6),Ask-(StopLoss*Point)*5,slipage,Ask-(StopLoss*Point)* 6,Ask-(TakeProfit*Point)*4,"thank",magic,0,Blue);
OrderSend(Symbol(),OP_BUYLIMIT,Lots*( 7),Ask-(StopLoss*Point)*6,slipage,Ask-(StopLoss*Point)* 7,Ask-(TakeProfit*Point)*5,"thank",magic,0,Blue);
OrderSend(Symbol(),OP_BUYLIMIT,Lots*( 8),Ask-(StopLoss*Point)*7,slipage,Ask-(StopLoss*Point)* 8,Ask-(TakeProfit*Point)*6,"thank",magic,0,Blue);
OrderSend(Symbol(),OP_BUYLIMIT,Lots*( 9),Ask-(StopLoss*Point)*8,slipage,Ask-(StopLoss*Point)* 9,Ask-(TakeProfit*Point)*7,"thank",magic,0,Blue);
OrderSend(Symbol(),OP_BUYLIMIT,Lots*(10),Ask-(StopLoss*Point)*9,slipage,Ask-(StopLoss*Point)*10,Ask-(TakeProfit*Point)*8,"thank",magic,0,Blue);
//===//
}
//-------------------------------------------------------------//
if(OrdersTotal()<5&&LastOrderProfit())CloseOrders( );
//================================================== ===========//
}
void CloseOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDoub le(Bid,Digits),30);
}
if(OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDoub le(Ask,Digits),30);
}
if(OrderType()>OP_SELL)OrderDelete(OrderTicket());
}
}
//================================================== =============//
bool LastOrderProfit()
{
for(int i=OrdersHistoryTotal();i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Ma gicNumber)
{
if(OrderProfit()>0)return(true);
else return(false);
}
}
return(true);
}
[PHP]آخر تعديل بواسطة stop1 ، 10-12-2011 الساعة 07:29 PM
- 10-12-2011, 08:41 PM #9
- 28-12-2011, 04:51 PM #10
اخي الكريم
ارجو منك ان تصحح لي الخطء بالدوال...
فعندما يتم اغلاق الطلبات المعلقة يقفل طلب ويبقي طلب؟؟؟ والمطلوب هو اقفال كل الطلبات
if(OrdersTotal()<5&&LastOrderProfit())CloseOrders( );
=============================================
bool LastOrderProfit(){
for(int i=OrdersHistoryTotal();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Ma gicNumber){
if(OrderProfit()>0)return(true);
else return(false);
}
}
return(true);
}
===============================
void CloseOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDoub le(Bid,Digits),30);
}
if(OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDoub le(Ask,Digits),30);
}
if(OrderType()>OP_SELL)OrderDelete(OrderTicket());
}
}
- 28-12-2011, 11:33 PM #11