【無料】メールマガジン配布します!

真実!しか流さないメールマガジン《不定期》

メルマガのお申し込みはコチラ

なんちゃってコピートレードツール・・・

先日、インジケーターのコードが長い!!とのちょっと読者の方とやり取りし取りました。

最初は、コードって見るだけ拒否反応でるんですよね。

 

ただ、一見どんな複雑そうなシステムも1つ1つはシンプルなものの積み上げですから

 

ということでなんちゃって、コピートレードツールを作ってみた。

 

これが、コピーもとのEAコード(Masterってやつです)

 

//+——————————————————————+
//|                                       tomo_Copy_trial_Ver1.0.mq4 |
//|                                             Copyright 2014, tomo |
//|                             http://xn--fx-5f5cr13csqi9uodiz.com/ |
//+——————————————————————+
#property copyright "Copyright 2014, tomo"
#property link      "http://xn--fx-5f5cr13csqi9uodiz.com/"
#property version   "1.00"
#property strict

#import "MemMap.dll"
string SetMemString(string tag,string msg);
string GetMemString(string tag);
#import

extern string Master_name="EB";
int CheckOrder;

//+——————————————————————+
//| Expert initialization function                                   |
//+——————————————————————+
int OnInit()
  {
//—
//—
   return(INIT_SUCCEEDED);
  }
//+——————————————————————+
//| Expert deinitialization function                                 |
//+——————————————————————+
void OnDeinit(const int reason)
  {
//—
  }
//+——————————————————————+
//| Expert tick function                                             |
//+——————————————————————+
void OnTick()
  {
//—
   static double ACopy_Lots=0;
   double Copy_Lots=0;
   //——————–
   for (int pos = OrdersTotal() – 1; pos >= 0; pos–)
   {
       CheckOrder=OrderSelect(pos, SELECT_BY_POS, MODE_TRADES);

         if(OrderSymbol() == Symbol())
         {
         if (OrderType() == OP_BUY ){Copy_Lots = OrderLots();}
         if (OrderType() == OP_SELL ){Copy_Lots = OrderLots()*-1;}
         }
   }
   if( Copy_Lots == ACopy_Lots )return; else ACopy_Lots = Copy_Lots;
    string DataCopy = SetMemString(Master_name,DoubleToStr(Copy_Lots,2));
  }
//+——————————————————————+

faiさんのところで元々配布してあった、メモリ共有をつかってMT4間の通信をしてます。

そして、豊島先生のコピートレードツール記事を参考にちょいと作ってみました^^;

 

まあ、あれです。1ポジロジックをコピーする専用(自分用)なので

ロットの増減でエントリーとエグジット判断をします。

 

これがクライアント側EAのコード。

 

//+——————————————————————+
//|                                       tomo_Copy_trial_Ver1.0.mq4 |
//|                                             Copyright 2014, tomo |
//|                             http://xn--fx-5f5cr13csqi9uodiz.com/ |
//+——————————————————————+
#property copyright "Copyright 2014, tomo"
#property link      "http://xn--fx-5f5cr13csqi9uodiz.com/"
#property version   "1.00"
#property strict

#import "MemMap.dll"
string SetMemString(string tag,string msg);
string GetMemString(string tag);
#import

extern int    MAGIC=99999;
extern string Master_name="EB";
int CheckOrder;

//+——————————————————————+
//| Expert initialization function                                   |
//+——————————————————————+
int OnInit()
  {
//—
//—
   return(INIT_SUCCEEDED);
  }
//+——————————————————————+
//| Expert deinitialization function                                 |
//+——————————————————————+
void OnDeinit(const int reason)
  {
//—
  }
//+——————————————————————+
//| Expert tick function                                             |
//+——————————————————————+
void OnTick()
  {
//—

   static double Copy_Lots=0;
   double BCopyLots = StrToDouble( GetMemString(Master_name) );
   //——————–
   if(Copy_Lots == BCopyLots)return;
   if ( BCopyLots>0 )CheckOrder=OrderSend(Symbol(),OP_BUY,MathAbs(BCopyLots-Copy_Lots),Ask,3,0,0,Master_name, MAGIC,0,White);
   if ( BCopyLots<0 )CheckOrder=OrderSend(Symbol(),OP_SELL,MathAbs(Copy_Lots-BCopyLots),Bid,3,0,0,Master_name, MAGIC,0,Black);
   if ( BCopyLots == 0 )CloseAll();
   Copy_Lots = BCopyLots;
  }
//+——————————————————————+

void CloseAll(){

   for (int pos2 = OrdersTotal() – 1; pos2 >= 0; pos2–) {
      CheckOrder=OrderSelect(pos2, SELECT_BY_POS, MODE_TRADES);
      if ( OrderMagicNumber() == MAGIC) {
         if (OrderType() == OP_BUY  && OrderSymbol() == Symbol() ) CheckOrder=OrderClose(OrderTicket(), OrderLots(), Bid, 3, Green);
         if (OrderType() == OP_SELL && OrderSymbol() == Symbol() ) CheckOrder=OrderClose(OrderTicket(), OrderLots(), Ask, 3, Green);
      }
   }

 

今回は、コードの解説はしませんがたったこれだけでも、なんちゃってコピートレードが出来るって話ですね。

 

左が、FXDDで右がPepperstoneです。

image

注文を入れると

image

やや遅れて注文みごとコピー

image

 

注文が入ったのをみると

Master口座(FXDD)

20140520063314

クライアン側(Pepperstone) 
20140520063401

コピー時間に1秒16掛かってます。

これってクライアント側がTickが動いてからしかコピーしてないからちょっと時間が掛かりすぎてるかも(汗)こんな時どうしたらいいのだろうか??遅延を許容するのか?

 

他のコピーツールってどうなってんでしょうね。

参考にですが、1ポジ専用のコピートレードですから^^;

 

ここに貼ったコードをそのままコンパイルしただけでは、稼働できませんのでDLLファイルも必要です。

なにかのヒントなればいいかもって感じで

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

tomoよりのお願い

参考になったちょっと役に立ったお疲れさんって
少しでもおもったかた(*゜▽゜ノノ゛☆

 

ポッチっとお願いします。その1ポチ!ありがとう

にほんブログ村 為替ブログ FX初心者本人(1年目)へ
にほんブログ村

 

このエントリーをはてなブックマークに追加 はてなで広めてください。この記事が役に立つ人がいると思います。
←左のボタンをクリックして共有してください。

 

 

関連記事

タグ

2014年5月20日 | コメント/トラックバック(0) |

カテゴリー:MQL講座

トラックバック&コメント

この投稿のトラックバックURL:

コメントをどうぞ

このページの先頭へ