スポンサーリンク
ホーム » Uncategorized » OriginalMoneyManagement.mqhファイルのコード全体記述
a

OriginalMoneyManagement.mqhファイルのコード全体記述

Uncategorized
スポンサーリンク

OriginalMoneyManagement.mqhファイルのコード全体記述は以下のようになっています。

//+------------------------------------------------------------------+
//|                                      OriginalMoneyManagement.mqh |
//|                                                         MQL5ssei |
//|                                    https://mqlinvestmentlab.com/ |
//+------------------------------------------------------------------+
#property copyright "MQL5ssei"
#property link      "https://mqlinvestmentlab.com/"
//+------------------------------------------------------------------+

#define MAX_RISK_PERCENT 10		// 最大リスク許容度

// ロット数を確認・調整する関数
double VerifyVolume(string parSymbol,double parVolume)
{
	double minVolume = SymbolInfoDouble(parSymbol,SYMBOL_VOLUME_MIN);
	double maxVolume = SymbolInfoDouble(parSymbol,SYMBOL_VOLUME_MAX);
	double stepVolume = SymbolInfoDouble(parSymbol,SYMBOL_VOLUME_STEP);
	
	double tradeSize;
	if(parVolume < minVolume) tradeSize = minVolume;
	else if(parVolume > maxVolume) tradeSize = maxVolume;
	else tradeSize = MathRound(parVolume / stepVolume) * stepVolume;
	
	if(stepVolume >= 0.1) tradeSize = NormalizeDouble(tradeSize,1);
	else tradeSize = NormalizeDouble(tradeSize,2);
	
	return(tradeSize);
}

// 資金管理を考慮したロット数を算出する関数
double MoneyRiskManagement(string parSymbol,double parFixedVol,double parPercent,int parStopPoints)
{
	double tradeSize;//ロット数を格納する変数を宣言
	
	//仮引数が適切に設定されているかを確認する
	if(parPercent > 0 && parStopPoints > 0)
	{  //最大リスク許容%を超えていたら、//最大リスク許容%に設定しなおす
		if(parPercent > MAX_RISK_PERCENT) parPercent = MAX_RISK_PERCENT;
		
		//許容損失額を設定する
		double margin = AccountInfoDouble(ACCOUNT_BALANCE) * (parPercent / 100);
		//1ティックごとの変動額を算出する
		double tickSize = SymbolInfoDouble(parSymbol,SYMBOL_TRADE_TICK_VALUE);
		
		//ロット数を算出する。
		tradeSize = (margin / parStopPoints) / tickSize;
		//算出したロット数が適切かどうかVerifyVolume関数で確認する。
		tradeSize = VerifyVolume(parSymbol,tradeSize);
		//ロット数を戻り値として返す
		return(tradeSize);
	}
	else
	{//仮引数に許容損失額を算出する値が設定されていなければ固定ロットを返す
		tradeSize = parFixedVol;
		tradeSize = VerifyVolume(parSymbol,tradeSize);
		
		return(tradeSize);
	}
}


//約定価格とストップロス価格との差分をポイントに変換する関数
double StopPriceToPoints(string parSymbol,double parStopPrice, double parOrderPrice)
{
	double stopDiff = MathAbs(parStopPrice - parOrderPrice);
	double getPoint = SymbolInfoDouble(parSymbol,SYMBOL_POINT);
	double priceToPoint = stopDiff / getPoint;
	return(priceToPoint);
}

関連用語リンク集

MQL5FX関連の用語リンク集です。
当サイトでは、元々わからない言葉や概念に出くわしたら、すぐその言葉に立ち戻れるよう、かなり細かく内部リンクを張り巡らせており、多様な用語を網羅しています。

興味のある内容に直接アクセスし、疑問の解決にお役立ていただければと思います。

スポンサーリンク
Uncategorized
スポンサーリンク
シェアする
エムキューエルをフォローする
スポンサーリンク
【超入門】MQL5 でEAを作ろうブログ
タイトルとURLをコピーしました