اقتباس:
المشاركة الأصلية كتبت بواسطة سمير محمد ارمان
السلام عليكم اخى الكريم
انا فى كل اكسبيرتاتى
اعمل بطريقة ادارة راس المال
مع التحكم فى نسبة المحاطرة من راس المال
كما مبين فى الاكسبيرت المرفق
تحياتى لك
شكرا لك استاذ سمير
انا اضفت الكود الذى فى الاكسبيرت لكنه يعمل اللوت بناءا على حجم الحساب اذا زاد زاد اللوت واذا قل اللوت يقل لكن انا اريد ان تكون نسبة المخاطرة ثابتة بناءا على حجم الستوب
هنا كود اكسبيرت بسيط لتقاطع السعر مع الموفينج كما ترى احيانا يكون الستوب 100 نقطة واحيانا 60 نقطة واحيانا 20 وهكذا والمطلوب ان تكون المخاطرة نسبة معينة من الحساب بناءا على الستوب
يعنى لو الحساب الف دولار و المخاطرة المطلوبة كانت 50 دولار من الحساب و الستوب فى الصفقة 100 نقطة يكون اللوت بنصف دولار للنقطة يعنى الخسارة 50 دولار من اصل 1000 دولار
ولو كان الستوب 25 نقطة يكون اللوت ب 2 دولار للنقطة يعنى خسارة 50 دولار ولو كان الستوب 50 نقطة يكون اللوت بواحد دولار يعنى خسارة 50 دولار ايضا..وهكذا يعنى نسبة المخاطرة ثابتة
[PHP][/PHP]
//+------------------------------------------------------------------+
//| ppp.mq4 |
//| Copyright 2016, MetaQuotes Software Corp. |
//|
https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
extern int MaxTrades=1;
extern double StopLoss ;
extern double TakeProfit ;
extern double MagicNumber ;
input double Lot1=0.1;
input bool Auto_Lots=true;
input double MaxRisk = 0.01;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
double ma1,ma2,ma3;
ma1=iMA(NULL,0,15,0,MODE_SMA,PRICE_CLOSE,1);
ma2=iMA(NULL,0,15,0,MODE_SMA,PRICE_CLOSE,2);
ma3=iMA(NULL,0,30,0,MODE_SMA,PRICE_CLOSE,1);
double Speed=MathAbs(ma3-Close[1])/Point;
Comment(Speed);
double Speed2=Speed+400;
double SL,TP;
if ( ma1>ma3&&Close[2]<ma2&&Close[1]>ma1 ){
if(StopLoss==0){SL=0;}else{SL=Ask-Speed2*Point;}
if(TakeProfit==0){TP=0;}else{TP=Ask+Speed2*Point;}
double lot;
OrderSend(Symbol(),OP_BUY,Lots(MaxRisk),Ask,3,SL,T P,"klk",MagicNumber,0,Blue);
PlaySound("Alert.wav");}}
//+------------------------------------------------------------------+
/////////////
double Lots(double risk)
{
double Lot;
if(Auto_Lots)
{
if(risk>1)risk=1;
//__________________________________________________ _______________________________________
double Min_Lot = MarketInfo(Symbol(), MODE_MINLOT);
double Max_Lot = MarketInfo(Symbol(), MODE_MAXLOT);
double lot_step= MarketInfo(Symbol(), MODE_LOTSTEP);
Lot=NormalizeDouble(AccountBalance()*risk/100/10,2);
Lot=NormalizeDouble(Lot,2);
Lot=NormalizeDouble(Lot/lot_step,0)*lot_step;
if (Lot < Min_Lot) Lot = Min_Lot;
if (Lot > Max_Lot) Lot = Max_Lot;
//__________________________________________________ _______________________________________
}
else
{
if(Lot1>MarketInfo(Symbol(),MODE_MAXLOT))
{Lot=MarketInfo(Symbol(),MODE_MAXLOT);}
else if(Lot1<MarketInfo(Symbol(),MODE_MINLOT))
{Lot=MarketInfo(Symbol(),MODE_MINLOT);}
else if(MathMod(Lot1,MarketInfo(Symbol(),MODE_LOTSTEP)) >0)
{
double R=MathMod(Lot1,MarketInfo(Symbol(),MODE_LOTSTEP))/100 ;
Lot=NormalizeDouble(Lot1-R,2) ;
}
else
{
Lot=Lot1;
}
}
return(Lot);
}