質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MQL4

MQL4とは、MT4(MetaTrader4)で用いられるプログラム言語です。MT4は無料で使えるチャートソフトあり、MQL4を使うことで分析ツールのオリジナルスクリプトの作成ができます。

Q&A

1回答

495閲覧

MQL4 有効証拠金でエントリーするを実装

AYU5290

総合スコア0

MQL4

MQL4とは、MT4(MetaTrader4)で用いられるプログラム言語です。MT4は無料で使えるチャートソフトあり、MQL4を使うことで分析ツールのオリジナルスクリプトの作成ができます。

0グッド

0クリップ

投稿2022/07/31 06:47

編集2022/08/12 08:32

MQL4でFX自動システムを作っています。

実現したいこと

エントリーをする時にロット数でエントリーするのではなく、
有効証拠金が〇〇円だったら〇〇ロットでエントリーをする。とう言うのをつけたいです。
パラメーターで変更可能にしたいです。

有効証拠金が増えるたびにロット数が変更する感じにしたいです。


有効証拠金が10万円でしたら、1ロットでエントリー。
利確後11万円で1.1ロットでエントリーする。

該当のソースコード

#property strict extern int magic=1; extern double lots=0.01; extern double slippage=3; extern int fast=9; extern int slow=17; extern double nampin=300; extern int maxnampin=10; extern int rieki=1000; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } extern string RSI_Config="RSI設定"; // RSI設定 extern bool RSI_Use = true ; // フィルター利用 extern int RSI_Period=14; // RSI期間 extern double RSI_BuyOpen = 30; // 買いエントリー閾値 extern double RSI_SellOpen = 70; // 売りエントリー閾値 bool rsi(int shift=0, int timeframe=0){ double rsi=iRSI(NULL,timeframe,RSI_Period,PRICE_CLOSE,shift); if(RSI_BuyOpen > rsi) return true; else if(RSI_SellOpen < rsi) return true; return false; } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { if( AccountNumber() != 252057445) { Comment("口座認証されていません"); return(0); } Comment("認証済口座"); //---- int cnt; int CurrentPosition; int Ticket; double profit; CurrentPosition=-1; for(cnt=0;cnt<OrdersTotal();cnt++) { if(OrderSelect(cnt,SELECT_BY_POS)==false)continue; if(OrderMagicNumber()!=magic)continue; profit=profit+OrderProfit(); if(OrderMagicNumber()==magic)CurrentPosition=cnt; } if(CurrentPosition==-1) { if(MAcross(fast,slow)==1 && rsi() == 1) { Ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,slippage,0,0,"buy",magic,0,Blue); } if(MAcross(fast,slow)==2 && rsi() == 2) { Ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,slippage,0,0,"sell",magic,0,Red); } } else { OrderSelect(CurrentPosition,SELECT_BY_POS); if(OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { if(OrdersTotal()<(maxnampin+1)&&Close[0]<(OrderOpenPrice()-nampin*Point)) { Ticket=OrderSend(Symbol(),OP_BUY,OrderLots()*3,Ask,slippage,0,0,"buy2",magic,0,Blue); } if(profit>rieki) { allClose(Green); } } if(OrderType()==OP_SELL) { if(OrdersTotal()<(maxnampin+1)&&Close[0]>(OrderOpenPrice()+nampin*Point)) { Ticket=OrderSend(Symbol(),OP_SELL,OrderLots()*3,Bid,slippage,0,0,"sell2",magic,0,Red); } if(profit>rieki) { allClose(Yellow); } } } } //---- return(0); } //+------------------------------------------------------------------+ int MAcross(int fast,int slow) { double kakoa,kakob; double gennzaia,gennzaib; kakoa=iMA(NULL,0,fast,0,MODE_SMA,PRICE_CLOSE,1); kakob=iMA(NULL,0,slow,0,MODE_SMA,PRICE_CLOSE,1); gennzaia=iMA(NULL,0,fast,0,MODE_SMA,PRICE_CLOSE,0); gennzaib=iMA(NULL,0,slow,0,MODE_SMA,PRICE_CLOSE,0); if(kakoa<kakob&&gennzaia>=gennzaib) { return(1); } if(kakoa>kakob&&gennzaia<=gennzaib) { return(2); } return(0); } void allClose(color clr) { int i; for(i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) continue; if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=magic) continue; if(OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,NormalizeDouble(slippage,0),clr); if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,NormalizeDouble(slippage,0),clr); } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2022/07/31 08:04

このままではコードが読みづらいので、質問を編集し、</>(コードの挿入)ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
y_waiwai

2022/07/31 08:04

で、その提示のコードではどういう問題があるんでしょうか
AYU5290

2022/07/31 10:34

対応くださりありがとうございます。問題はないのです、ただ機能をつけたいだけです。
guest

回答1

0

1、現在の有効証拠金を取得する。
2、現在の保有ロート数を取得する。
3、有効証拠金に対して、保有ロット数が、予定のロット数内に
あるかどうかを計算。
4、得られた余力ロット数以内でエントリー。

ですが、十分にゆとりを持った計画が必要とは思います。
当然、金額の種別($、¥など)をしっかりと判断する事が重要ですね。

投稿2022/08/11 23:32

Ruby

総合スコア50

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問