اخواني المبرمجين اريد الكود البرمجي الذي يقوم بالوظيفة الاتية
السلام عليكم
لنفرض اخواني انني وضعت 4 اوامر باي ستوب فوق السعر الحالي و اول اورد يبعد عن السعر الحالي 10 نقط والفرق بين كل امر و الثاني 10 نقط
اريد كود برمجي اضعه في الاكسبيرت يقوم بفعل الاتي :
عند تفعيل الاوردر الرابع اريد الاكسبيرت ان يقوم بوضع الستوب لوز للامر الثاني و الاول علي نقطة دخول الامر الثاني
مثال : لو ان السعر الان عند النقطة صفر ثم ارتفع السعر للنقطة 10 ثم للنقطة 20 ثم للنقطة 30 ثم للنقطة 40 في هذه الحالة سوف يقوم الاكسبيرت بفتح الاربع اوامر باي ستوب
انا اريده عندما يفتح الاوردر الرابع عند نقطة 40 ان يقوم بوضع ستوب الامر الاول المفتوح من نقطة 10 و الاوردر الثاني المفتوح من نقطة 20 علي دخول الاوردر الثاني (( نقطة 20 ))
فما هو الكود البرمجي لفعل هذا ؟؟؟
و جزاكم الله خيرا مقدما
رد:اخواني المبرمجين اريد الكود البرمجي الذي يقوم بالوظيفة الاتية
أفهم من كلامك أنك تعرف كيفية التعامل مع وظائف ستدمجها في الاكسبرت
إذا
مكتبة ضمن الاكسبرت لترجمة الأخطاء
كود:
#include <stderror.mqh>
#include <stdlib.mqh>
المتغيرات الخارجية ستكون كالتالي
كود:
extern string comment="O-O";
extern int slippage=3;
//----
extern double Take_Profit=50;
extern double Stop_Loss=50;
extern double lots = 0.01;
extern int ten_pips=10;
المتغيرات العامة ستكون كالتالي
كود:
int tries=100;
int DG;
double PT,MD;
الوظيفة init ستكون كالتالي
كود:
int init()
{
DG=Digits;
if(DG==3 || DG==5){PT=Point*10;MD=10;}
else{PT=Point;MD=1;}
return(0);
}
الوظائف المضافة ستكون في start كالتالي
كود:
// OP_BUYSTOP OP_BUY
int ret_1=buy_stop(1,1); //ret_1 first result,
if(ret_1==2){int ret_2=buy_stop(2,2);} //ret_2 second result
if(ret_2==3){int ret_3=buy_stop(3,3);} //ret_3 third result
if(ret_3==4){int ret_4=buy_stop(4,4);} //ret_4 fourth result
//----
if(looking_for_4(4,OP_BUY)>0)
{
buy_stop_loss(1); //first order magic number = 1
buy_stop_loss(2); //second Order magic number =2
}
//----
//----
// OP_SELLSTOP OP_SELL
int ret__1=sell_stop(-1,1); //ret__1 first result,
if(ret__1==-2){int ret__2=sell_stop(-2,2);} //ret__2 second result
if(ret__2==-3){int ret__3=sell_stop(-3,3);} //ret__3 third result
if(ret__3==-4){int ret__4=sell_stop(-4,4);} //ret__4 fourth result
//----
if(looking_for_4(-4,OP_SELL)>0)
{
sell_stop_loss(-1); //first order magic number = -1
sell_stop_loss(-2); //second Order magic number = -2
}
//----
الوظائف هي
buy_stop لتعليق أمر شراء
sell_stop لتعليق أمر بيع
looking_for_4 للبحث إذا تفعل الامر المعلق الرابع و صار أمر سوق
buy_stop_loss وضع حد الخسارة لأوامر الشراء
sell_stop_loss وضع حد الخسارة لأوامر البيع
كود:
int buy_stop(int in,int x)//first variable magic number second variable multiplier of 10 pips
{
int buystop_ticket=0;
int number=0;
if(ten_pips<MarketInfo(Symbol(),MODE_STOPLEVEL)){ten_pips=MarketInfo(Symbol(),MODE_STOPLEVEL);}
//----
double ask=Ask + (ten_pips*x*PT);
//double loss_stop=ask - (Stop_Loss*PT);
double profit_take=ask + (Take_Profit*PT);
//----
while(buystop_ticket<=0 && number<tries )
{
while(!IsTradeAllowed())Sleep(500);
RefreshRates();
buystop_ticket=OrderSend(Symbol(),OP_BUYSTOP,lots,ask,slippage*MD,0,profit_take,comment,in,0,Green);
if(buystop_ticket<0){Print("Error opening buy stop! ",ErrorDescription(GetLastError())); number++;}
}
if(buystop_ticket<0){Print("Error Occured "+ErrorDescription(GetLastError()));}
else if(buystop_ticket>0){return(in+1);}
}
//----
int sell_stop(int in,int x)//first variable magic number second variable multiplier of 10 pips
{
int sellstop_ticket=0;
int number=0;
//----
double bid=Bid - (ten_pips*x*PT);
//double loss_stop=bid + (Stop_Loss*PT);
double profit_take=bid - (Take_Profit*PT);
//---
while(sellstop_ticket<=0 && number<tries )
{
while(!IsTradeAllowed())Sleep(500);
RefreshRates();
sellstop_ticket=OrderSend(Symbol(),OP_SELLSTOP,lots,bid,slippage*MD,0,profit_take,comment,in,0,Red);
if(sellstop_ticket<0){Print("Error opening sell stop! ",ErrorDescription(GetLastError())); number++;}
}
if(sellstop_ticket<0){Print("Error Occured "+ErrorDescription(GetLastError()));}
else if(sellstop_ticket>0){return(in-1);}
}
//----
int looking_for_4(int magic,int type)
{
RefreshRates();
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderSymbol()==Symbol())
{
if(OrderMagicNumber()==magic && OrderType()==type)
{
cnt++;
}
}
}
}
return(cnt);
}
//----
void buy_stop_loss(int magic)
{
RefreshRates();
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
{
if(OrderType()==OP_BUY)
{
if(OrderStopLoss()==0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask - (Stop_Loss*PT),OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
//----
void sell_stop_loss(int magic)
{
RefreshRates();
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
{
if(OrderType()==OP_SELL)
{
if(OrderStopLoss()==0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid + (Stop_Loss*PT),OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
//----