2018年5月6日日曜日

帰国とくまのみさんのソース解説

さーて、わたし的に第三期と呼んでいるEA開発ライフです。
第一期はGSKを退職しのんびりとAMSERなど開発していた時です。
第二期はゴゴジャンで出品者サポートに回っていた時期です。
サポートと言っても色々教えていただく毎日でしたが

そしてゴゴジャンを退職して第三期が今です。
退職しマカオへ半週間、そしてマレーシアのゲンティン(カジノ)のクルーズ船に一週間のってきました。
この時の体重が80.5kg デブになってしまいました。
そして朝はささみ、昼はささみ、よるもささみで毎日ジムへ通い始めます。



何と28日で10.5kg痩せました!!70kgです。
会う人みんながすごいBUTリバウンド怖いよ~的な事をいいます。
そしてGWにノルウェイジャンジュエルというクルーズ船に乗ってきました。
ルーレットを4日ほどしましたが無敗です!!
ベットコントロールと心理戦、ヒットアンドウェイ(勝ち逃げw)そして投げるスピードと落下地点の推測をすればルーレットでは負ける気がしません。

そして体重が...7日で75kgです。
プチリバウンドw
ある程度船でもジムに通ったのですがやはりインプットが多いといくら運動(アウトプット)をしてもダメなようです。

さて、クルーズが始まり高知に着いた頃にくまのみさんからシンボルについて質問を頂きました。携帯で返信をしていたためあまり上手く伝えられなかったかもしれません。
簡単な解説を書いてみたいと思います。

以下頂いたソース

string TUUKA; ←TUUKAを文字列として使用する宣言
extern string TA_1 = "EURUSD"; TA_1を文字列として使用する宣言初期値はEURUSD externが付いている物は設定で変更できます。
extern string TA_2 = "GBPUSD"; 上と同じ  TA_2の初期値はGBPUSD
extern string TA_3 = "USDCHF"; 
extern string TA_4 = "EURCAD";
extern string TA_5 = "USDCAD";
extern string TA_6 = "AUDCAD";
extern string TA_7 = "AUDNZD";
extern string TA_8 = "EURUSD";

TUUKA = TA_1; TUUKAにTA_1の値を入れます。TUUKAはGBPUSDです。
TUUKA = TA_2; TUUKAにTA_2の値を入れます。TUUKAはUSDCHFです。
TUUKA = TA_3;
TUUKA = TA_4;
TUUKA = TA_5;
TUUKA = TA_6;
TUUKA = TA_7;
TUUKA = TA_8;  TUUKAにTA_8の値を入れます。TUUKAはEURUSDです。
TUUKA = Symbol() ; TUUKAにSymbol()をいれます。TUUKAは現在のチャートの通貨ペアです。
int start() {
if (StringSubstr(Symbol(), 0, 6) != TUUKA || Period() != PERIOD_M30) return (1);




int start(){     }この中身はティックが動くたびに動作します。
StringSubstr(Symbol(), 0, 6)  StringSubstrは文字列の中から文字を取り出します。
この場合Symbol()の0文字目から6文字とりだします。
チャートの通貨ペアがUSDJPYの場合U~YまでとりだしますのでUSDJPYとなります。
通貨ペアにおまけがついていることがあります。
例えばUSDJPY-a01 この場合は0文字目のU~6文字YまでとりますのでUSDJPYとなり-a01が無くなります。
!=は等しくない場合 ちなみに==は等しい場合です。
||はorです。

USDJPYのチャートで通貨ペア表示が6文字の場合
StringSubstr(Symbol(), 0, 6)はUSDJPY
TUUKA 今はSymbol()はUSDJPY となります。
同じです。

最後のreturn(1)はティックルーチンから出る命令ですので、StringSubstr(Symbol(), 0, 6)とTUUKAが異なる場合はこの続きの発注やらなんやらが動かなくなります。

今回の場合は同じですので動きます。

チャートの名前におまけがついている場合 例えばUSDJPY-a01
StringSubstr(Symbol(), 0, 6)はUSDJPY
TUUKA 今はSymbol()はUSDJPY-a01 となります。

USDJPYとUSDJPY-a01は異なりますので動作しなくなります。

通貨ペアの縛りを無くすには
if (StringSubstr(Symbol(), 0, 6) != TUUKA || Period() != PERIOD_M30) return (1);
if (Period() != PERIOD_M30) return (1);
にします。

タイムフレームの縛りを無くす場合は
if ( Period() != PERIOD_M30) return (1);

両方無くす場合は
if (StringSubstr(Symbol(), 0, 6) != TUUKA || Period() != PERIOD_M30) return (1);
すべて消しましょう。


う~ん長文失礼します!






8 件のコメント:

  1. TACA様、早速ありがとうございます。^^
    TA_1とTA_8はEURUSDで同じ通貨にして仕舞っていましたね!
    TA_8はEURGBP だったです。
    通貨縛りはとりあえず、TA_1~TA_8迄の8通貨で行いたいのですが、、、
    この場合も、if (Period() != PERIOD_M30) return (1);
    だけにすれば良いという事でしょうか?
    m(_ _)m

    返信削除
  2. if (StringSubstr(Symbol(), 0, 6) != TUUKA || Period() != PERIOD_M30) return (1);
    ここでは指定通貨ペア、指定の足以外の場合動作しないようにしています。
    if (Period() != PERIOD_M30) return (1);
    にすると通貨ペアは何を選んでも動作するようになります。

    恐らくこれで動作すると思いますが、発注や決済のプログラムがマルチ通貨用に作られている必要があります。

    返信削除
  3. 「発注や決済のプログラムがマルチ通貨用に作られている必要」、、、
    個別にチャートに貼り付けて、では、、、ちゃんと動いているので、、、
    どうなんでしょう?、、、動いて貰いたい処です。

    返信削除
  4. 一週間、上記プログラム内容で稼働させてみましたが、、、
    貼り付けたチャートの通貨でしか売買は行われませんでした。><

    返信削除
  5. 上記では指定の通貨ペア以外の取り引きを排除するコードの削除になりますので、1EA1チャートで複数通貨を動かすにはかなりの修正が必要になります。また、通貨ペア毎にティックのタイミングが異なりますので複数チャートにEAを動作させる方法がいいと思います。

    返信削除
  6. それしかないのですかね?><
    口座資金を最大限レバレッジを掛けて最大限資金を有効に使いたかったのですが、、、
    MT4って同時タイミングの注文は受け付けない仕様になっているとなっているみたいですが、、、
    通貨が違うと同時注文を受け付けてしまうんですよね!><
    (これは数年前に経験済でして、、、)
    これを避けたいと思ったのですが、、、
    if (OrderSend(Symbol(), OP_SELL, LOT,,,,
    を、
    if (OrderSend(EURUSD, OP_SELL, LOT,,,,
    if (OrderSend(GBPUSD, OP_SELL, LOT,,,,
    if (OrderSend(USDCHF, OP_SELL, LOT,,,,
    と 重ねていったらどうかなぁ?とか、、、
    んんん、><

    返信削除
  7. MT4のプログラムは
    条件判定→発注 条件判定→クローズ
    のような流れになります。

    複数通貨ペアの場合
    通貨ペア①の条件判定→通貨ペア①発注
    通貨ペア②の条件判定→通貨ペア②発注
    通貨ペア③の条件判定→通貨ペア③発注

    通貨ペア①の条件判定→通貨ペア①クローズ
    通貨ペア②の条件判定→通貨ペア②クローズ
    通貨ペア③の条件判定→通貨ペア③クローズ

    といった感じです。
    ソース全部を見ていませんので何とも言えないところですが、
    OrderSend【発注のコマンド】を重ねると
    通貨ペア①の条件判定→通貨ペア①発注→通貨ペア②の発注→通貨ペア③の発注→・・・となってしまいます。


    返信削除
  8. TACA様、こんにちは
    一つのEAの中に上記
    通貨ペア①の条件判定→通貨ペア①発注
    通貨ペア②の条件判定→通貨ペア②発注
    通貨ペア③の条件判定→通貨ペア③発注

    通貨ペア①の条件判定→通貨ペア①クローズ
    通貨ペア②の条件判定→通貨ペア②クローズ
    通貨ペア③の条件判定→通貨ペア③クローズ
    で組み込んでNULL,Symbol()の処を変数にしたり 直接通貨名にしたりしましたが、、、
    結局、貼り付けたチャートのみでの取引しかしませんでしたぁ~><

    返信削除