【MT4/5】Meta Trader初心者専用55【EA素人】 [無断転載禁止]©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
>>912
> 標準偏差とボリバンね、基本的に同じや
処理速度に違いとかない? 楽天はMT4口座があるんですが、これってMT5は使えないんでしょうか? >>923
mqlの関数定義の中身知らんからなんともいえんw >>923
簡単な計算だからどちらも一瞬で終わるはず ポジション取り続けるんです。間違いをご指摘ください。
input int Magic = 56789; //マジックナンバー
input double Lots = 0.1; //取引ロット数
double Open1 = Open[1];//一つ前の初値
double Close1 = Close[1];//一つ前の終値
//double BB1 = );
double BB1 = (Open1 + Close1) / 2;//基準値
double Kijun0 = Open1 - Close1;
int ea_ticket_res; // チケッット番号
int Total = OrdersTotal();
int DP = Digits; //小数点位置
double Base = NormalizeDouble(BB1, Digits);
double Kijun1 = NormalizeDouble(Kijun0, Digits);
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
} void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if ( -0.02 <= Kijun0 <=0.02 && Total == 0) {
ea_ticket_res = OrderSend( // 新規エントリー注文
Symbol(), // 通貨ペア
OP_BUYSTOP, // オーダータイプ
Lots, // ロット[0.01単位]
Base + 110 * Point, // オーダープライスレート
20, // スリップ上限
0, // ストップレート
0, // リミットレート
"ぬるぽ", // オーダーコメント
Magic, // マジックナンバー(識別用)
0, // オーダーリミット時間
clrRed // オーダーアイコンカラー
);
// エントリー中ポジションの注文変更
LimitStop_Set(ea_ticket_res);
}
//---
}
//+------------------------------------------------------------------+
// エントリー中のポジションのリミット・ストップを変更
void LimitStop_Set( int in_ticket_no ) {
double limit_rate,stop_rate;
int modify_resend_num; // 変更試行回数
bool modify_ret; // 変更判定
int errorcode;
bool selbool; selbool = OrderSelect(in_ticket_no, SELECT_BY_TICKET); // オーダー中のチケット選択(チケットNo指定)
limit_rate = OrderOpenPrice() + ( 10 * Point() * 10); // リミット価格 = 約定価格 + 10.0pips
stop_rate = OrderOpenPrice() - ( 7 * Point() * 10); // ストップロス価格 = 約定価格 - 10.0pips
limit_rate = NormalizeDouble(limit_rate,Digits); // リミット価格 を正規化
stop_rate = NormalizeDouble(stop_rate ,Digits); // ストップロス価格を正規化
for( modify_resend_num = 0; modify_resend_num < 20; modify_resend_num++ ) { // 試行回数上限:20
modify_ret = OrderModify(
OrderTicket(), // チケットNo
OrderOpenPrice(), // 注文価格
stop_rate, // ストップロス価格
limit_rate, // リミット価格
0, // 有効期限
clrRed // 色
);
if ( modify_ret == false ) { // 注文変更拒否
Sleep(300); // 300msec待ち
errorcode = GetLastError(); // エラーコード取得
// printf( "%d回目:注文変更拒否。エラーコード:%d , 詳細:%s ",
// modify_resend_num+1, errorcode , ErrorDescription(errorcode));
} else { // 決済注文約定
Print("注文変更完了。 チケットNo=",in_ticket_no);
break;
}
} >>930
OrderSend後もTotal変数が更新されてないから
&& Total == 0は常に真 >>933
具体的に教えていただければ。。。。
そのレスが具体的と言われたらそれまでなのですが。 >>934
Total = OrdersTotal(); がOnTick()の中にないとティックごとに最新のオーダー数を取り直さない
という訳で>>921の俺の本命的中! 他にあるか知らんけどTotal使う直前に
Total = OrdersTotal();
を書けば終わり
単純ミスでないなら、あらかじめある関数の動くタイミングを見直した方がよかです -0.02 <= Kijun0 <=0.02
がだめなんじゃない?
-0.02 <= Kijun0 && Kijun0 <=0.02
にしてみてはどうかと 草むしり終了。
皆様ありがとうございます。
今からやってみます。 ドル円のチャートで縦軸は0.1毎に、時間軸は1時間毎にグリッドが表示されるように
したいのですが、どうしたらいいですか? バックテスト、デフォルトだと横軸は試行回数になってるけど
これ年月日に変更する事って出来ないかな?
そうすれば「このストラテジーだとリーマンショックで手ひどくやられるね」とか
「スイスフランショックはなんとか乗り切れそうだ」とか判別がつくんだが 831です。この前メールでやり取りしてくれた方へ、
またメールを送ったので、確認お願いします。 941さんへ
QuantAnalyzerというソフトを使えばできますよ。使い方は調べてみてください。
分からなかったらまた言ってくださいねー みんな、国内業者使ってんの?
エックスイーマーケッツとか海外?
レバ10でも国内とどまる? 口座維持率をXとした場合、ロットは幾らほど立てるのが最適なの? 質問お願いいたします。
--条件--
条件1a: +2σにローソク足か実態の片方もしくは両方 がタッチ(5分足かつ15分足)
条件1b: ー2σローソク足か実態の片方もしくは両方 がタッチ(5分足かつ15分足)
条件2:ATR14日間設定 数値0.1以下
条件1a + 条件2の時に↓矢印表示
条件2a + 条件2の時に↑矢印表示
以上の条件を実装したくて、±2σ線タッチした時に矢印表示はできたのですが
条件2(ATR)が0.1以上の時でも矢印が表示されてしまいます。
エラーは全て潰したのでバグではなく実装が間違っていると思うのですがどこが間違っているかわかりません
どこが違うのかご指摘いただけたらと思い質問させていただきました。
該当箇所と思われるコードが以下となります。
ご回答の程よろしくお願いいたします。
ATR_1 = iATR(NULL, 15, 1512, i);
double ATR_Level = 0.1;
if (High[i]>=band1 && ATR_1 <= ATR_Level) {
sellbuf[i]= High[i] + markerdist*Point;
if (i < 2 ) {
UD="m Down";
DoAlert(UD);
}}
if (Low[i]<=band2 && ATR_1 <= ATR_Level) {
buybuf[i]= Low[i] - markerdist*Point;
if (i < 2 ) {
UD="m Up.";
DoAlert(UD);
} } >>949
iATRのperiodが1512って間違い? >>950
条件2:ATR14日間設定 数値0.1以下
ATR_1 = iATR(NULL, 15, 1512, i);
15分足で14日間の値を取得したかったので1512なのかなと思ったのですが違うのでしょうか? >>952
σの矢印表示はできていて、それにATRの条件を追加し他時に0.1以上でも矢印が表示されてしまいます。
ATR0.1以下では 表示させたくないのです。
//---- main loop
for(int i= lastbar; i>=offset; i--){
sellbuf[i]= 0;
buybuf[i]=0;
sellbuf2[i]= 0;
buybuf2[i]=0;
ATR_1buf[i]=0;
band1= iBands(NULL,0, period, deviation, 0, PRICE_CLOSE, MODE_UPPER, i);
band2= iBands(NULL,0, period, deviation, 0, PRICE_CLOSE, MODE_LOWER, i);
ATR_1 = iATR(NULL, 15, 1512, i);
double ATR_Level = 0.1;
band1buf[i]= band1;
band2buf[i]= band2;
ATR_1buf[i]= ATR_1;
if (High[i]>=band1 && ATR_1 <= ATR_Level) {
sellbuf[i]= High[i] + markerdist*Point;
if (i < 2 )
{
UD="m Down";
DoAlert(UD);
}}
if (Low[i]<=band2 && ATR_1 <= ATR_Level) {
buybuf[i]= Low[i] - markerdist*Point;
if (i < 2 )
{
UD="m Up.";
DoAlert(UD);
}} >>953
>>ATR0.1以下では 表示させたくないのです。
missです。
x ATR0.1以下では 表示させたくないのです。
o ATR0.1以上では 表示させたくないのです。 >>951
1512はどのように導き出したのかわかりませんが、14日間ではなくて、15分足14本分のATRを求めたいのでしたら、単純にperiodは14でいいと思うのですが。。 >>955
ATR_1 = iATR(NULL, 15, 14, i);
こちら14にしても変わらずでした。 たまに外人が作ったインジのソースコードに UniqueID って変数が入ってるのが
あるんですけど なんの意味があるんでしょうか? >>956
変数iは開いているチャート(例えば一分足)のバーの位置(最新バーが0で、古い方向に1ずつ増える)を指していますよね?
ATR_1 = iATR(NULL, 15, 14, i);
で第4引数は15分足チャートのバーの位置を指定しますから、第4引数にiを指定すると、
例えば1分足でiが3だった場合は、15分足チャートでは0または1を指定するのが正しいはずなのに3が指定され意図しない動作となります。
現在チャート(例えば1分足)のバーのiの位置に対応する15分足チャートのバーの位置は
iBarShift(NULL, PERIOD_M15, Time[i], false)
などと指定すれば求められますので、iの位置に上の値を入れるが良いと思うのです。 >>940
ObjectCreate�
ObjectSet�
で線を描く >>956
できました!!!ありがとうございます!!! MT4でもクラスを使ったオブジェクト指向プログラミングが出来るようになったと聞いて
ちょっと興味があるんだけど何か参考になるサイトって無い?
オブジェクト指向自体はC++やC#を通してさわりは把握してるけど
MT4独特のクラスの癖みたいなものを勉強できるサイトがあったら知りたい >>963
MQL5で調べた方がいいかも。
MQL4は古いサイトが多いからね >>964
ふむふむ
というわけでちょっと調べてクラス作ってみた
持ってるポジションをエグジットする簡単なクラスだけど
コンパイルしてみたら次の様なWarningが出てきた
possible loss of data due to type conversion
Warningだから無視してもいいんだけどなんか気になる・・・
class Position
{
private:
double m_lots;
double m_exitPrice;
double m_slipPage;
int m_ticketNumber;
color m_arrowColor;
public:
// コンストラクタ
void Position()
{}
// 決済する
void Exit()
{
OrderClose(m_ticketNumber, m_lots, m_exitPrice, m_slipPage, m_arrowColor);
}
}; >>965
スリッページは多分int型だから、double型がint型へ暗黙の型変換される
っで、暗黙の型変換でデータが失われるかもよ?ってワーニング
どうでもいいけど、暗黙の型変換、英語ではインプリシットコンバージョン
とかいうらしい。
scala弄ってた時に初めて見て何それ超カッケーと思ったw >>966
ほんとだ・・・スリップってint型だったのね
ありがとうノシ クラスオブジェクトを動的配列で作成してみようと思って次の様なプログラム書いたんだけどエラーになる
int N = 5;
MyClass obj[];
ArrayResize(obj, N);
for(int i=0; i<N; i++)
{
*obj[i] = new MyClass(Symbol(), 0);
}
-illigal operation use
'obj' - object pointer expected
'=' - illegal operation use
'=' - l-value required
静的なクラスオブジェクトの配列は作れるんだけど
動的なクラスオブジェクトの配列はどうやったら作れるんだろう? >>969
MT4で以下の文をコンパイルすると
NewClass[] dim = new NewClass[3];
'[' - name expected
というエラーが返されてしまうみたい
うーむ・・・
ちなみに静的クラスオブジェクトだったら以下の文でコンパイルが通った
MyClass *obj[3];
for(int i=0; i<3; i++)
{
obj[i] = new MyClass(Symbol(), 0);
}
問題は上記の"3"の部分を一般変数のNに変えて動的にしようとすると
コンパイルが通らなくなることで・・・ これでできたような気がするんですんが、そもそも、こういう事ではなかったらもうしわけないですん…。
int N = 5;
MyClass objcts[];
for(int i=0; i < N; i++)
{
MyClass obj = new MyClass(Symbol(), 0);
ArrayResize(objects, i+1);
objects[i] = obj;
} USDJPYの1分足スキャルピング型EA(自動売買ツール)とサインツールを開発・公開しております。
興味がありましたら見てみてください。
http://awsedrftgyh12345.blogto.jp/archives/cat_163697.html >>971
これってnewしたインスタンスがリークしてね? >>971
> MyClass obj = new MyClass(Symbol(), 0);
この行でエラーになっちゃうみたい。
ちなみに以下の様に変更することでコンパイルエラーはでなくなった。
ちょっと強引なやり方なのでこれがふさわしいのかは分からないけど・・・
int N = 5;
MyClass *obj[];
ArrayResize(obj, N);
for(int i=0; i<N; i++)
{
obj[i] = new MyClass(Symbol(), 0);
}
MQL4って微妙にC++と流儀が違うのね・・・
CとC++を微妙に混ぜたような・・・ どのmt4でも使える(稼げる)無料EAってありませんか ku-chartみたいな他通貨を呼び出すインジケーターが、バックテストで動かなくて困ってるんですが、何かいい方法はありませんか?
ファイル関数系とdll系は苦手でして。
MT5では動くなら、今から勉強するんですけど。。 MT5では普通に動く。MT4では一工夫いるがやり方はググればすぐ見つかる。 あー、テクニカル指標の計算を自分でプログラム書かないといけないからめんどくさいね。難しいわ。 983です。
動かないですね。。
ヴィジュアルチャートに貼り付けても、呼び出した時だけ表示されて、その後は止まってしまいます。。
mt5を頑張って勉強しようかな 最新足がダメなだけで確定足使う分には別ペア参照でも問題ないと思うけど
最新足がテストのペアしか更新されない 恥を承知で自作関数を晒してみる。これをku-chartにコピペして
iMA → iMA_Custom に書き換えれはテスターでも動くはず。
double iMA_Custom(string symbol, int timeframe, int maperiod, int mashift, int mamethod, int price, int shift)
{
double ret = 0;
if(IsTesting())
{
datetime dt = iTime(_Symbol, timeframe, shift);
int collection = 1;
if(mamethod == MODE_EMA || mamethod == MODE_SMMA) collection = 16;
if(Bars(symbol, timeframe) - iBarShift(symbol, timeframe, dt, false) < maperiod * collection) return(0);
double ocBuf[];
ArrayResize(ocBuf, maperiod * collection);
if(price == PRICE_OPEN && CopyOpen(symbol, timeframe, iBarShift(symbol,timeframe,dt,false) + mashift, maperiod * collection, ocBuf) < 0) return(0);
if(price == PRICE_HIGH && CopyHigh(symbol, timeframe, iBarShift(symbol,timeframe,dt,false) + mashift, maperiod * collection, ocBuf) < 0) return(0);
if(price == PRICE_LOW && CopyLow(symbol, timeframe, iBarShift(symbol,timeframe,dt,false) + mashift, maperiod * collection, ocBuf) < 0) return(0);
if(price == PRICE_CLOSE && CopyClose(symbol, timeframe, iBarShift(symbol,timeframe,dt,false) + mashift, maperiod * collection, ocBuf) < 0) return(0);
ret = iMAOnArray(ocBuf, 0, ArrayRange(ocBuf, 0) - maperiod * (collection - 1), 0, mamethod, 0);
ArrayFree(ocBuf);
}else{
ret = iMA(symbol,timeframe,maperiod,mashift,mamethod,price,shift);
}
return(ret);
} バグっていうか少し誤差があるみたい。
iMA(…) - iMA_Custom(…) が0にならないわ。 >>992
ちょっと間違ってたので訂正します。たぶんこれでいけるかと。
double iMA_Custom(string symbol, int timeframe, int maperiod, int mashift, int mamethod, int price, int shift)
{
double ret = 0;
if(IsTesting())
{
int collection = 1;
if(mamethod == MODE_EMA || mamethod == MODE_SMMA) collection = 16;
if(Bars(symbol, timeframe) - shift < maperiod * collection) return(0);
double ocBuf[];
ArrayResize(ocBuf, maperiod * collection);
if(price == PRICE_OPEN && CopyOpen(symbol, timeframe, shift + mashift, maperiod * collection, ocBuf) < 0) return(0);
if(price == PRICE_HIGH && CopyHigh(symbol, timeframe, shift + mashift, maperiod * collection, ocBuf) < 0) return(0);
if(price == PRICE_LOW && CopyLow(symbol, timeframe, shift + mashift, maperiod * collection, ocBuf) < 0) return(0);
if(price == PRICE_CLOSE && CopyClose(symbol, timeframe, shift, maperiod * collection, ocBuf) < 0) return(0);
ret = iMAOnArray(ocBuf, 0, ArrayRange(ocBuf, 0) - maperiod * (collection - 1), 0, mamethod, 0);
ArrayFree(ocBuf);
}else{
ret = iMA(symbol,timeframe,maperiod,mashift,mamethod,price,shift);
}
return(ret);
} うああ、PRICE_CLOSEのとこ訂正しわすれてた。↓でお願いします。
if(price == PRICE_CLOSE && CopyClose(symbol, timeframe, shift + mashift, maperiod * collection, ocBuf) < 0) return(0); >>997
5つ全部だよ。
バックテストしてみればどれだけすごいかわかる。 >>998
通貨指定と勝率、plラインが典型的なあれでワロタ。ただのアフィ目的は消えてくれるかな? >>999
デモ口座で稼働してコピーツールで取引口座で売買するんだよ。
ibに関しては自分でいい所見つけてくれw このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 208日 16時間 54分 59秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。