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

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

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

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

Q&A

2回答

1456閲覧

ハル移動平均線の向きによる途転売買

loput

総合スコア0

MQL4

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

0グッド

0クリップ

投稿2021/11/15 06:10

編集2021/11/18 03:06

前提・実現したいこと

ハル移動平均線の向きによる途転売買をしたいのですが、
バーが変わるごとにポジションを取ります。

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

バーが変わるごとにポジションを取ります。
途転売買で1回だけポジションを持ちたいのですが、、。

該当のソースコード

//--- Inputs
input double Lots= 0.01;
int MAGICMA= 20131111;
double hma_11,hma_12;
int buys=0,sells=0;

void OnTick()
{
//+------------------------------------------------------------------+
//| Calculate open positions |
//+------------------------------------------------------------------+
//---
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}

//+------------------------------------------------------------------+
//| Check for close order conditions |
//+------------------------------------------------------------------+
//--- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//--- get Moving Average
hma_11= iCustom(NULL,0,"_HMA",1,1);hma_12= iCustom(NULL,0,"_HMA",1,2);
//---
for( i=0;i<OrdersTotal();i++ )
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
//--- check order type
if(OrderType()==OP_BUY)
{
if( buys>0 && hma_12>hma_11)//2 && hma_21>hma_11 )////////////close long
{
if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
Print("OrderClose error ",GetLastError());
}
break;
}
if(OrderType()==OP_SELL)
{
if( sells>0 && hma_12<hma_11 )//&& hma_11>hma_21 )////////////close short
{
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
Print("OrderClose error ",GetLastError());
}
break;
}
}
//---

//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
int res;
//--- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//--- get Moving Average
hma_11= iCustom(NULL,0,"_HMA",1,1);hma_12= iCustom(NULL,0,"_HMA",1,2);
//--- sell conditions
if( buys==0 && hma_12>hma_11)////////////////////////////////////////open sell
{
res=OrderSend(Symbol(),OP_SELL, Lots ,Bid,3,0,0,"",MAGICMA,0,Red);
}
//--- buy conditions
if( sells==0 && hma_12<hma_11)///////////////////////////////////////open buy
{
res=OrderSend(Symbol(),OP_BUY, Lots ,Ask,3,0,0,"",MAGICMA,0,Blue);
}
}////////////////////////////////////////////////////////////////////////////////////////end

試したこと

ここに問題に対して試したことを記載してください。

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

実際のバックテスト結果。
1 2021.11.08 00:00 sell 1 0.01 113.274 0.000 0.000 0.00 10000.00
2 2021.11.08 04:00 sell 2 0.01 113.591 0.000 0.000 0.00 10000.00
3 2021.11.08 08:00 sell 3 0.01 113.565 0.000 0.000 0.00 10000.00
4 2021.11.08 12:00 sell 4 0.01 113.388 0.000 0.000 0.00 10000.00
5 2021.11.08 16:00 sell 5 0.01 113.351 0.000 0.000 0.00 10000.00
6 2021.11.08 20:00 sell 6 0.01 113.232 0.000 0.000 0.00 10000.00
7 2021.11.09 00:00 sell 7 0.01 113.211 0.000 0.000 0.00 10000.00
8 2021.11.09 04:00 sell 8 0.01 113.125 0.000 0.000 0.00 10000.00
9 2021.11.09 08:00 sell 9 0.01 112.766 0.000 0.000 0.00 10000.00
10 2021.11.09 12:00 sell 10 0.01 112.844 0.000 0.000 0.00 10000.00
11 2021.11.09 16:00 sell 11 0.01 112.869 0.000 0.000 0.00 10000.00
12 2021.11.09 20:00 sell 12 0.01 112.831 0.000 0.000 0.00 10000.00
13 2021.11.10 00:00 sell 13 0.01 112.836 0.000 0.000 0.00 10000.00
14 2021.11.10 04:00 close 1 0.01 112.920 0.000 0.000 3.13 10003.13
15 2021.11.10 08:00 close 2 0.01 112.889 0.000 0.000 6.22 10009.36
16 2021.11.10 12:00 close 3 0.01 113.224 0.000 0.000 3.01 10012.37
17 2021.11.10 16:00 close 4 0.01 113.453 0.000 0.000 -0.57 10011.81
18 2021.11.10 20:00 close 5 0.01 113.936 0.000 0.000 -5.13 10006.68
19 2021.11.11 00:00 close 6 0.01 113.907 0.000 0.000 -5.92 10000.76
20 2021.11.11 04:00 close 7 0.01 114.073 0.000 0.000 -7.56 9993.21
21 2021.11.11 08:00 close 8 0.01 113.952 0.000 0.000 -7.26 9985.95
22 2021.11.11 12:00 close 9 0.01 114.089 0.000 0.000 -11.60 9974.36
23 2021.11.11 16:00 close 10 0.01 113.885 0.000 0.000 -9.14 9965.22
24 2021.11.11 20:00 sell 14 0.01 114.080 0.000 0.000 0.00 9965.22
25 2021.11.12 00:00 sell 15 0.01 114.055 0.000 0.000 0.00 9965.22
26 2021.11.12 04:00 close 11 0.01 114.291 0.000 0.000 -12.43 9952.79
27 2021.11.12 08:00 close 12 0.01 114.212 0.000 0.000 -12.08 9940.71
28 2021.11.12 12:00 sell 16 0.01 114.024 0.000 0.000 0.00 9940.71
29 2021.11.12 16:00 sell 17 0.01 113.954 0.000 0.000 0.00 9940.71
30 2021.11.12 20:00 sell 18 0.01 113.904 0.000 0.000 0.00 9940.71
31 2021.11.12 23:59 close at stop 18 0.01 113.869 0.000 0.000 0.31 9941.02
32 2021.11.12 23:59 close at stop 17 0.01 113.869 0.000 0.000 0.75 9941.77
33 2021.11.12 23:59 close at stop 16 0.01 113.869 0.000 0.000 1.36 9943.13
34 2021.11.12 23:59 close at stop 15 0.01 113.869 0.000 0.000 1.63 9944.76
35 2021.11.12 23:59 close at stop 14 0.01 113.869 0.000 0.000 1.85 9946.61
36 2021.11.12 23:59 close at stop 13 0.01 113.869 0.000 0.000 -9.07 9937.54
_1番から13番までバー発生ごとに注文している、これを1回だけに、したいのです。
24,25番も、同じく。。28,29,30番も、同じく。

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

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

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

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

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

yu-ima

2021/11/15 15:01

確認ですが、 決済(OrderClose)は、発生していますか? つまり、発注(OrderSend), 決済(OrderClose)が順番に行われていませんか?
loput

2021/11/17 03:57

新しいバーごとに、hma_12,hma_11,の大小で発注され、hma_12,hma_11の大小で決済されます。 プログラム全文を載せてあるので、走らせてみれば分かると思いますが、、、。 『つまり、発注(OrderSend), 決済(OrderClose)が順番に行われていませんか?』 _連続して発注, 決済は行われていません。
guest

回答2

0

間違いが分かりました、単純なミスでした。
誰も指摘できないなんて、ここのレベルが分かりました。
_
さよなら!
_
https://www.youtube.com/watch?v=xq95tN57bvQ
_

投稿2021/11/18 03:45

loput

総合スコア0

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

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

0

[質問への追記・修正の依頼] に記述したのですが 記載がないのでここで質問します。

決済(OrderClose)は、発生しましたか?
つまり、発注(OrderSend), 決済(OrderClose)が順番に発生していませんか?

投稿2021/11/16 09:38

yu-ima

総合スコア249

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

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

loput

2021/11/17 03:59

決済(OrderClose)は、発生しました。 つまり、発注(OrderSend), 決済(OrderClose)が順番に発生していませんか? _連続して発注, 決済は行われていません。
yu-ima

2021/11/17 07:01

連続発生はしませんが、決済条件が発生したら決済(Close)され決済後、BUYなら注文中のBUYの数が0になるので、再び、up/downが切り替わらないでも条件が成立すれば注文されます。 もし、1回のup/downで1回だけ注文したいのであれば、注文したことを覚えておくフラグ(変数)を用意し、注文時にフラグを立て そのフラグが立っている間は、注文を行わない。 up/downが転換したとき、フラグをクリアして 次の注文条件に備えればよいと思います。
loput

2021/11/18 03:00

『決済条件が発生したら決済(Close)され決済後、BUYなら注文中のBUYの数が0になるので、再び、up/downが切り替わらないでも条件が成立すれば注文されます。』 _それが私の望んでいる「途転売買」というもの。 注文したことを覚えておくフラグ(変数)は既に用意されており(buys,sells)、それが常に「0」なので悩んでいます。 分かる方が居たら、教えて下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問