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

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

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

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

Q&A

解決済

1回答

641閲覧

MQL4を使ったEA作成

nisei2

総合スコア19

MQL4

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

0グッド

0クリップ

投稿2020/08/31 04:14

編集2020/09/03 08:57

前提・実現したいこと

買いポジションを持っている時に売りの条件がみたされたら決済したい。

発生している問題・エラーメッセージ

買いポジション、売りポジションを持っている時の判別方法がわからないため思っている処理ができない。

該当のソースコード

MQL4

1#property copyright "Copyright 2020, MetaQuotes Software Corp." 2#property link "https://www.mql5.com" 3#property version "1.00" 4#property strict 5 6int OnInit() 7 { 8 return(INIT_SUCCEEDED); 9 } 10 11void OnDeinit(const int reason) 12 { 13 14 } 15 16extern int maxspread = 20;//スプレッド 17extern int closeperiod = 20;//有効期限 18extern double rot =0.1;//ロット 19 20void OnTick() 21 { 22 23 //前日足の四本値 24 double H1 = iHigh(NULL,0,1); 25 double L1 = iLow(NULL,0,1); 26 double O1 = iOpen(NULL,0,1); 27 double C1 = iClose(NULL,0,1); 28 29 //週足の四本値 30 double WH1 = iHigh(NULL,PERIOD_W1,1); 31 double WL1 = iLow(NULL,PERIOD_W1,1); 32 double WO1 = iOpen(NULL,PERIOD_W1,1); 33 double WC1 = iClose(NULL,PERIOD_W1,1); 34 35 //前週足の四本値 36 double WH2 = iHigh(NULL,PERIOD_W1,2); 37 double WL2 = iLow(NULL,PERIOD_W1,2); 38 double WO2 = iOpen(NULL,PERIOD_W1,2); 39 double WC2 = iClose(NULL,PERIOD_W1,2); 40 41 //月足の四本値 42 double MNH1 = iHigh(NULL,PERIOD_MN1,1); 43 double MNL1 = iLow(NULL,PERIOD_MN1,1); 44 double MNO1 = iOpen(NULL,PERIOD_MN1,1); 45 double MNC1 = iClose(NULL,PERIOD_MN1,1); 46 47 //前月足の四本値 48 double MNH2 = iHigh(NULL,PERIOD_MN1,2); 49 double MNL2 = iLow(NULL,PERIOD_MN1,2); 50 double MNO2 = iOpen(NULL,PERIOD_MN1,2); 51 double MNC2 = iClose(NULL,PERIOD_MN1,2); 52 53 int highestprice = iHighest(NULL,PERIOD_D1,MODE_HIGH,20,1);//最高値 54 int cheapestprice = iLowest(NULL,PERIOD_D1,MODE_LOW,20,1);//最安値 55 56 //最高値の4本値 57 double highestH = iHigh(NULL,0,highestprice); 58 double highestL = iLow(NULL,0,highestprice); 59 double highestO = iOpen(NULL,0,highestprice); 60 double highestC = iClose(NULL,0,highestprice); 61 62 //最安値の4本値 63 double cheapestH = iHigh(NULL,0,cheapestprice); 64 double cheapestL = iLow(NULL,0,cheapestprice); 65 double cheapestO = iOpen(NULL,0,cheapestprice); 66 double cheapestC = iClose(NULL,0,cheapestprice); 67 68 if(OrdersTotal() == 0)//ポジション制限 69 { 70 if(cheapestH < C1 && MarketInfo(NULL,MODE_SPREAD) < maxspread)//買いの条件とスプレッド制限 71 { 72 int Ticket = OrderSend(Symbol(),OP_BUYLIMIT,rot,cheapestH,10,cheapestL,0,NULL,1212,closeperiod,Magenta);//購入の処理 73 } 74 75 if(highestL > C1 && MarketInfo(NULL,MODE_SPREAD) < maxspread)//売りの条件とスプレッド制限 76 { 77 int Ticket = OrderSend(Symbol(),OP_SELLLIMIT,rot,highestL,10,highestH,0,NULL,1111,closeperiod,Magenta); 78 } 79 } 80 81 82 83 if(highestL > C1)//買いポジションの決済 84 { 85 bool Close = OrderClose(1111,rot,Bid,10,Magenta); 86 } 87 88 if(highestL > C1)//売りポジションの決済 89 { 90 bool Close = OrderClose(1212,rot,Ask,10,Magenta); 91 } 92 } 93

試したこと

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下のURLを参考にすれば解決すると思います。
https://yukifx.web.fc2.com/sub/reference/16_trade_func/cone/trade_select.html
https://qiita.com/bucchi49/items/be71179f8b5c09b11e23
https://labo.gogojungle.co.jp/articles/68
https://labo.gogojungle.co.jp/articles/75

[追記]
OrderSelect()を実行することで保有するポジション情報を取得できますが、
OrderSelect()を実行するタイミングによっては古い情報を得てしまう可能性があります。
なので、ポジション情報が必要な時はそのタイミングで都度OrderSelect()を実行した方が良いと思います。

投稿2020/09/07 03:07

編集2020/09/07 06:30
buibui80

総合スコア1033

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

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

nisei2

2020/09/07 13:20

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問