本文へスキップ

WENGROUP

FX情報FX INF.

FXとは?
FXはForeign eXchangeの略で、外国為替証拠金取引(がいこくかわせしょうこきんとりひき)といいます。
証拠金(保証金)を業者に預託し取引(売買)をおこなうものです。海外ではForex(Foreign exchange)と呼ばれてます。
 
1998年に外国為替及び外国貿易法が改正されて、急速に広まっています。取引の仕方によっては非常に高いリスクを負うため、実際の取引にあたっては外国為替相場に関する十分な知識や経験が必要です。勉強してからの取引になります。

ここでは、初心者用に具体的に説明をしていきます。

外国為替はなにか?
  外国通貨をもつことです。 証券会社に口座をつくり、外国の通貨を購入するのです。 あとで円に換えればいいのです。 FXでは外国通貨は手にしませんし、できません。 つまり買ったら必ず売らなければなりません。いつ売るかは自由ですが・・・。 FXでは通貨はペアで考えます。 ドル・円、ユーロ・円、ユーロ・ドルなどです。

「取引ってなにするの?」
   実際手にしない通貨をですが、1ドル100円のときドルを買い、これが1ドル105円になったときドルを売れば儲かるという仕組みです。 この取引をするのに1ドルが95円になったら損するので、そのときのためお金を預けて取引をすることが外国為替証拠金取引なのです。 ですから証拠金は担保みたいなものです。

「円安でも円高でも取引可能です」
  円安は1ドル100円が105円になったとき、これは買いです。
逆に1ドルが105円から100円になったとき、これは売りです。
逆にやると損します。 単純にこれだけなんですが頻繁に価格が上下しますので、なかなか思うようにはいきません。

「練習できる?」
  証券会社ではどこでもDEMO取引がありますので、そこに登録して売買の画面に慣れ、取引の練習ができます。 

「証券会社はどこがいい?」
最近はたくさん増えて、海外の証券会社もあります。
  ・スプレッドが狭いこと
  ・売買が確実にできること。 頻繁にエラーとならないこと。
  ・証券会社都合の取引中止がないこと
  ・価格の動きが正しいこと。
  ・通貨動向の情報が多いこと、正しいこと。
  ・チャートが見やすく、分析ツールが豊富なこと。
  ・入出金が早くできること。



FX注文方法
[成行注文]
その時の為替レートで売ったり買ったりする一般的(普通)な注文方法です。


[指値注文]
「今の為替レートよりも安く買って、高く売りたい」または「高く売って安く買いたい」という注文方法です。


[逆指値注文]
「今の為替レートよりも高く買って、安く売りたい」または「安く売って高く買いたい」という注文方法です。この逆指値注文は主に、ストップロス(損失確定)に使われます。逆指値注文は「IfDone(イフダン)注文」、「OCO(オーシーオー)注文」、「トレール注文」で使われます。


[OCO(オーシーオー)注文]
OCO(オーシーオー)注文は、新規注文と同時に、決済注文を出すことができ、利食いのための指値注文、または損切りのための逆指値(ストップロス)注文を同時に発注することができます。この場合、どちらか一方が成立したら、 もう一方はキャンセルになります。


[IfDone(イフダン)注文]
IfDone(イフダン)注文は、初心者の方にぴったりの注文方法です。いくらで注文するかをまず指定して、いくらで決済するかの注文を同時に出すことができます。つまりいくらで新規に買って、いくらで決済して売るのかという注文を出すことができます。IfDone(イフダン)注文をより自動型にした注文方法にOCO(オーシーオ)注文があります。


[IfDone(イフダン)OCO注文]
IfDone(イフダン注文)とOCO(オーシーオー)注文を組み合わせた注文方法で、両者の特徴をそのまま活かした方法です。最初にIfDone(イフダン)注文が約定した後に、自動的にOCO(オーシーオー)注文が発動される仕組みです。IfDone(イフダン注文)では、決済注文は一つしか発注できませんが、OCO(オーシーオー)注文は一度に2つの決済注文が可能です。この両者を組み合わせることによって、一度に3つの注文が出せて、決済注文も2つ可能になります。つまり、IfDone(イフダン注文)注文で発注した場合、「新規ポジションの確保」「利益確定の指値」「損切りの逆指値」を同時に発注できて、最初の注文が約定されると、2つの決済注文も自動的に発動されるということです。


[トレール注文]
トレール注文とは、逆指値(ストップロス)注文を、より効率的に用いるための注文方法でトレーリングストップ注文とも呼ばれます。ストップロスのための逆指値注文を置いておくだけではなく、実勢の取引レートとほぼ同じ値幅間隔で、ストップ注文の指定レートを徐々に有利な方向へ自動的に追尾してくれます。



MT4について
MT4はロシアのメタクォートソフトウェア社が開発したフリーソフトです。
その完成度の高さからMT4は世界中のFX業者に採用されており、多くのFXトレーダーに愛用されています。 チャートだけ利用するのもいいでしょう。


MT4の入手方法を説明します。
有名な FXDD社 で DEMOを申し込みます。
3ヶ月で切れますが、再度申し込みできます。
まず、起動してるプログラムをすべて終了します。
次にプラウザのみ起動し、http://global.fxdd.com/ を 開きます。 
画面の右側にある「無料デモ口座」をクリックします。

画面が変わりデモの一覧が表示されます。
次に「METATRADERデモ申し込み」をクリックします。
画面が変わりデモの説明が表示されます。
下に枠で囲まれた申し込み欄がありますので記入してください。
記入が終わったら、ミスがないか確認してから一番下のオレンジの「同意して提出する」をクリックして下さい。 住所は「該当なし」でいいです。

画面が変わりダウンロードになりますので、矢印の絵があるDownload MetaTrader4をクリックするとMT4のダウンロードが始まります。
・このファイルを実行または保存しますか?
   保存をクリックする。(適当なところへ保存してください。))
・終了したらフォルダを開いてmt4setupをクリックする。
・すると実行、キャンセルを聞いてきますので実行をクリックする。
 (もしダウンロードが早く終わって実行時にエラーが出るようでしたら再度Downloadして下さい)
・「言語を選択して下さい」日本語にカーソルがきてますので、次へ
・ライセンスに同意にクリックし、次へ
・インストール先はそのままで、次へ
・終了したら そのままで 終了 をクリックする。
・再度登録画面が出るので確認し、メールを受け取るにチェックし、登録する。
これでMT4の画面が出てますのでこのまま利用できます。

左に気配値が表示されてBid、Askがわかります。
4つあるチャートで利用するものがないときはxで消して、上のファイルメニューから好きなチャートを表示します。 時間足はメニューの右端の時計アイコンで変更できます。

売買はチャート上から右クリックするとできます。
売買すると画面下の残高欄に表示されます。
決済はその行を右クリックすると決済画面がでます。
自動売買
プログラムがあれば自動で売買できます。
MT4のプログラムフォルダの expert へプログラムを入れます。
MT4を起動したら上のメニューの表示--ナビゲーターを選択し、expert advisors の該当プログラムをチャート上にドラッグします。
画面がでてきます、4項目ありますので、その4つにチェックある状態にして下さい。
OKをクリックします。 右上にプログラム名がでます。
上メニューのツール---オプションで画面が出たら Expert Advisors をクリックして、その中の4項目にチェックを入れて下さい。
最後に上メニューの Expert Advisors をクリックして 右上のプログラム名の横に表示されてる顔マークが にこにこ になればOKです。

なお、プログラム停止は そのプログラム名を右クリックしてExpert Advisorsの削除をクリックします。

プログラムテスト
バックテストができます。
まず画面上の不要な表示を消します。
左の気配値、ナビゲータ、下のターミナル、真ん中のチャートをxで消します。
上のメニューで表示から Strategy Tester をクリックします。
下に入力欄が表示されますので以下のように入力してください。
・Expert Advisors-------プログラムを選択
・通貨ペア-----------------通貨を選択
・期間----------------------期間を選択
・モデル-------------------Every Tick がいいでしょう。
・日付と時間--------------チェックし、開始日を20100101、終了日は今日にする。
・Visual Mode-----------チェックする。

右下の スタート をクリックすると開始します。

プログラムを修正せず、パラメタのみ変更してテストができます。
右上の Expert properties をクリックしてパラメターの入力を選択して変更したい項目をValueの欄に入力する。

次にテストするときは、この値は残ってますのでResetしてからテストして下さい。


プログラム修正
ソースプログラムがあれば修正できます。
また新規に自分で作成することもできます。


上のメニューからツール---MetaQuotes Language Editor を選択する。
画面が変わります。 右端にNavigatorがなければ、メニューのViewから選択してください。 そこにある修正するプログラムをダブルクリックします。
プログラムソースが表示されます。

プログラムを修正します。
メニューの左のフロッピィアイコンをクリックして保存します。

メニューの左端+アイコンで新規入力できます。

メニューの右の方Compileをクリックする。(ex4ファイルができる)
下の欄に 0 error と出ればOKです。
これでまたテストができます。

プログラムの方向
FXはオンラインで、常にデータが送られてきますので、それを処理しなければなりません。
 一般にコンピュータは記憶、集計、演算、分類が得意です。 あっという間に集計します。 
でもFXについては未来を(上がるか下がるかを)予測しないとできません。 
難しい作業で、過去データから予測するプログラムを考えなくてはなりません。
常に上下しながら上がったり下がったりしますので、その上下幅で利益を出すか、小さい上下は無視して大きく動くトレンドを狙うかになります。
1分、5分・・30分・・・1日・・・3日。。。1週間・・・半年後の上下を狙うのか?です。
それをどのようにして予測するかが問題なのです
予測する方法がわかれば、それをプログラムで自動にすることになります。
自動ですから画面をみて疲れることはなくなります。
正しくできてないと負けることになります。

経済発表時はどちらへ動くかわからないのでプログラムは時間で売買しないようにしたり、予測を入力して売買させるとか、また朝方のスプレッドが広がるときは売買しないようにプログラムするなどいろいろ対策して、勝つ確立をあげていくことになります。 ロジックは自分で考えなければいけません。
市販のものはナンピンが多く、最終的に大負けで終わるケースが多いのです。
プログラムがどういうロジックで動いてるか不明だと不安で使えません。

プログラムの流れ
FXのプログラムを見ますと、わかりにくい、流れになってない、命令の羅列となってるものが多いのです。 わかりやすい、メンテナンスしやすいプログラムでないとミスが多発しますし、後で直したり、処理を追加するときも全体を考えなくてはならなくなり時間がかかることになります。

FXの流れを考えて見ます。
・プログラム起動

・データーがきます
・次のデータが上がるか下がるか予測します。
・予測できたら売買します。
・売買中でしたら、決済するか調べます。
・決済OKでしたら決済します。
・売買中でしたらロスカットするかチェックします。
・ロスカットOKでしたら決済します。
・上記に該当しないときは、次のデータを待ちます。

・プログラム停止

こんな感じです。
もう少し整理してみます。

FXプログラムではread、writeの命令は不要です。

・売買中ならロスカットするかチェックします。
・売買中なら利益決済するかチェックします。
・売買中でなければ、売買ポイントかチェックします。

大きな流れは、この3つだけです。


プログラム作成
//+------------------------------------------------------------------+ 
//| expert start function  psw:1 buy  2:sell      | 
//+------------------------------------------------------------------+ 
int start() 
{ 
indirtn(); 
 
if (psw==1) buyrtn(); 
if (psw==2) sellrtn(); 
 
if (psw==0) entrtn();  
 
//---- 
return(0); 
} 
 
 
 
記述するのは赤色の部分だけ4行です。赤色の処理のところだけ個別に説明します。
最初の indirtn()はインジケータ処理(平均線の算出など)をする意味です。
次の ifですが 英語のもしもです。 
ここでは もしも pswが1のときは buyrtn() を処理する意味です。 
次も同様に もしもpswが2のときは sellrtn() を処理する意味です。 
次も同様で もしもpswが0のときは entrtn() を処理する意味です。 
上で説明した3つの処理です。 

ここで疑問に思うのは、pswってなに? ですね。
送られてくるデータによって処理をわけるのに勝手につけた名前です。
1のとき買い中、 2のとき売り中、0のとき建玉なし の意味で使います。
つまり、買ったときに1を入れ、売ったときに2を入れ、決済で0にします。

ではそれぞれの処理を確認します。
・indirtn・・・・・インジケータの値を算出する
・buyrtn・・・・・買い中で決済判定して決済する
・sellrtn・・・・・売り中で決済判定して決済する
・entrtn・・・・・売買ポイントか判定して売買する

プログラムは下記のようになります。 赤色のみ記述します。

//+------------------------------------------------------------------+ 
//| expert init function                   | 
//+------------------------------------------------------------------+ 
int init() 
{ 

 
//---- 
return(0); 
} 
 
//+------------------------------------------------------------------+ 
//| expert deinit function                  | 
//+------------------------------------------------------------------+ 
int deinit() 
{ 
return(0); 
} 
 
//+------------------------------------------------------------------+ 
//| expert start function psw:1 buy 2:sell        | 
//+------------------------------------------------------------------+ 
int start() 
{ 
indirtn(); 
 
if (psw==1) buyrtn(); 
if (psw==2) selrtn(); 
 
if (psw==0) entrtn();  

 
//---- 
return(0); 
} 


まだ記述してない4つの処理があります。
indirtnですが、これは平均足やRSIなどのインジケータの値を算出します。
命令のみですので後述します。

次にbuyrtnです。
買い中の決済処理です。
limit決済ですと不要ですが、平均足の交差を例にしますと、

//+------------------------------------------------------------------+ 
//| buy routin              l          | 
//+------------------------------------------------------------------+ 
void buyrtn() 
{  
if (SlowMA2<FastMA2 && SlowMA1>FastMA1) 
{  
ClosePositions();  
psw=0;
 
 
} 
 
//---- 
return(0); 
} 

となります。

平均線が下抜け時に決済するのです。

SlowMA2、FastMA2は長期短期2つ前のバーの値、
SlowMA1、FastMA1は長期短期1つ前のバーの値、
&&は 両方の条件が満たされていることを示す。
よって、このif文は
2つ前のバーでは短期が長期の上にあり、1つ前のバーでは下になった場合
となる。
つまり短期平均線が長期平均線を下に抜けたことを意味する。
買いの上がってる状態から下がったのだから決済することになる。
次のClosePositionsは建玉をすべて決済する処理です。
決済したのでpswを0にしてます。

次のsellrtnも同様で、売りの下がってるときに上がったので決済してます。


//+------------------------------------------------------------------+ 
//| sell routin psw 0:nothing 1:buy 2:sell | 
//+------------------------------------------------------------------+ 
void selrtn() 
{ 
if (SlowMA2>FastMA2 && SlowMA1<FastMA1) 
{ 
ClosePositions(); 
psw=0; 
}  

 
//---- 
return(0); 
} 

次はentrtnです。
売買してないときに、売買するかチェックし、entry するのです。

ここでは平均線を例にします。
平均線が上抜けしたら買いです、逆は売りです。

//+------------------------------------------------------------------+ 
//| entry routin psw 0:nothing 1:buy 2:sell | 
//+------------------------------------------------------------------+ 
void entrtn() 
{ 
 
//Buy signal ue nuke----------------------------- 
 
if (SlowMA2>FastMA2 && SlowMA1<FastMA1) 
{ 
OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,””,MAGIC,0,Blue); 
vpos = Ask; 

psw=1; 
 
return(0); 
} 
 
 
//Sell signal sita nuke------------------------- 
 
if (SlowMA2<FastMA2 && SlowMA1>FastMA1) 
{  
OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,””,MAGIC,0,Red); 
vpos = Bid;  
 
psw=2; 
 
} 

//---- 
return(0); 
} 


//はコメントでプログラムをわかりやすくするため入れます。
OrderSendは売買の命令です。中のパラメタを次に説明します。

・Symbol()-------通貨ペアです。チャートので処理します。
・OP_BUY--------買い発注です。
・Lots------------ロット数です、前もってここにロット数を入れておきます。
・Ask-------------現在値askです。
・Slippage-------スリップページで、値を入れておきます。
・0----------------ストップロスです。0は指定しない意味です。
・0----------------リミットです。  0は指定しない意味です。
・Blue------------買ったとき青色で買ったところを表示します。

vposは買ったデータを入れておきます。利益算出に必要です。
(実際に約定した値をみるのが正しいのですが、今回はこれで。)

売りも同様ですので省略します。

最後にindirtnです。
ここでは平均線の命令を説明します。

//+------------------------------------------------------------------+ 
//| indicator | 
//+------------------------------------------------------------------+ 
void indirtn() 
{ 
//---idouheikin keisan 
FastMA1 = iMA(NULL,0,FastMA_Period,0,MODE_SMA,PRICE_CLOSE,1); 
SlowMA1 = iMA(NULL,0,SlowMA_Period,0,MODE_SMA,PRICE_CLOSE,1); 
FastMA2 = iMA(NULL,0,FastMA_Period,0,MODE_SMA,PRICE_CLOSE,2); 
SlowMA2 = iMA(NULL,0,SlowMA_Period,0,MODE_SMA,PRICE_CLOSE,2);
 
 
//---- 
return(0); 
}

4行の命令があります。 プログラムのa=bはaにbを入れるの意味です。
よって4つの命令はiMAという命令で算出した値を等号の左へ入れる、ものです。
1行目のみ説明します。 iMAは移動平均線の値を算出します。
・NULL------------通貨です。 チャートの通貨を使用します。
・0-----------------時間足でチャートのを使用します。
・FastMA_Period-プログラムで指定した期間を使用します。
・MODE_SMA-----単純移動平均の意味です。
・PRICE_CLOSE--バーのclose値を使用します。
 終値 PRICE_CLOSE 0
 始値 PRICE_OPEN 1
 高値 PRICE_HIGH 2
 安値 PRICE_LOW 3
 中間値 (高値+安値)/2. PRICE_MEDIAN 4
 三種間値 (高値+安値+終値)/3. PRICE_TYPICAL 5
 四種間値 (高値+安値+始値+終値)/4 PRICE_WEIGHTED 6
・1-----------------現在のバーより1ヶ前のバーで算出します。


今回の平均線でのドテン売買のサンプルプログラムを以下に載せます。


//+------------------------------------------------------------------+ 
//| M15                            
//| EURUSD                          
//| testav1.mq4  
//| http://wengroup.net  
//+------------------------------------------------------------------+ 
 
#define MAGIC 77331017 
 
// parameter 
extern double Lots = 0.1; //lot 
extern int Slippage = 7; //slippage  
extern int FastMA_Period = 6; //tanki 
extern int SlowMA_Period = 30; //tanki 
extern double FastMA1 = 0; //fast heikin before 1 
extern double FastMA2 = 0; //fast heikin before 2 
extern double SlowMA1 = 0; //slow heikin before 1 
extern double SlowMA2 = 0; //slow heikin before 2 
// 
extern int psw = 0; //position sw 0:no 1:buy 2:sell  
extern double vpos = 0.00; //value of potiosion 
extern double vgen = 0.00; //value of now 
extern double vloss = 0.001; //value of stop 
extern double vlimit = 0.001; //value of limit 
 
 
//+------------------------------------------------------------------+ 
//| close  
//+------------------------------------------------------------------+ 
void ClosePositions() 
{ 
 
for(int i=0; i&lt;OrdersTotal(); i++) 
{ 
 
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break; 
 
if(OrderMagicNumber() != MAGIC || OrderSymbol() != Symbol()) continue; 
 
//order type check 
if (OrderType() == OP_BUY) 
{ 
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow); 
break; 
 
} 
 
if (OrderType() == OP_SELL) 
{ 
 
OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Green); 
break; 
 
} 
 
} 
 
return(0); 
} 
 
 
//+------------------------------------------------------------------+ 
//| indicator | 
//+------------------------------------------------------------------+ 
void indirtn() 
{ 
//---idouheikin keisan 
FastMA1 = iMA(NULL,0,FastMA_Period,0,MODE_SMA,PRICE_CLOSE,1); 
SlowMA1 = iMA(NULL,0,SlowMA_Period,0,MODE_SMA,PRICE_CLOSE,1); 
FastMA2 = iMA(NULL,0,FastMA_Period,0,MODE_SMA,PRICE_CLOSE,2); 
SlowMA2 = iMA(NULL,0,SlowMA_Period,0,MODE_SMA,PRICE_CLOSE,2); 
 
//---- 
return(0); 
} 
//+------------------------------------------------------------------+ 
//| entry routin psw 0:nothing 1:buy 2:sell | 
//+------------------------------------------------------------------+ 
void entrtn() 
{ 
 
//Buy signal ue nuke----------------------------- 
 
if (SlowMA2>FastMA2 && SlowMA1<FastMA1) 
{ 
OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,””,MAGIC,0,Blue); 
vpos = Ask; 
 
psw=1; 
 
return(0); 
} 
 
 
//Sell signal sita nuke------------------------- 
 
if (SlowMA2<FastMA2 && SlowMA1>FastMA1) 
{  
OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,””,MAGIC,0,Red); 
vpos = Bid;  
 
psw=2; 
 
} 
//---- 
return(0); 
} 
//+------------------------------------------------------------------+ 
//| buy routin psw 0:nothing 1:buy 2:sell | 
//+------------------------------------------------------------------+ 
void buyrtn() 
{  
if (SlowMA2<FastMA2 && SlowMA1>FastMA1) 
{  
ClosePositions();  
psw=0; 
 
} 
 
//---- 
return(0); 
} 
 
//+------------------------------------------------------------------+ 
//| sell routin psw 0:nothing 1:buy 2:sell | 
//+------------------------------------------------------------------+ 
void selrtn() 
{ 
if (SlowMA2>FastMA2 && SlowMA1<FastMA1) 
{ 
ClosePositions(); 
psw=0; 
}  
 
//---- 
return(0); 
} 
 
//+------------------------------------------------------------------+ 
//| expert init function  | 
//+------------------------------------------------------------------+ 
int init() 
{ 
Print(”******* start testav1 ****** good luck!!”); 
 
 
//---- 
return(0); 
} 
 
//+------------------------------------------------------------------+ 
//| expert deinit function  
//+------------------------------------------------------------------+ 
int deinit() 
{ 
return(0); 
} 
 
//+------------------------------------------------------------------+ 
//| expert start function psw:1 buy 2:sell   
//+------------------------------------------------------------------+ 
int start() 
{ 
indirtn(); 
 
if (psw==1) buyrtn(); 
if (psw==2) selrtn(); 
 
if (psw==0) entrtn();  
 
//---- 
return(0); 
} 


プログラム注意点      
プログラムができて実際に稼動させるときは、以下の点に注意してください。
(もちろんテスト環境は別です))

・経済発表時の対策をする。
 急激に上下しますのでストップロスに注意する。 またはプログラムを停止する。

・売買時のエラー対策をする。
 決済でエラーのときは再度決済命令を出す必要があります。
 短時間で多く命令を出すとシステムの負荷になりよくありません。
 でも決済しないわけには行きません。
 エラーにもよりますが、一定のタイミングで決済することになります。

・朝のスプレッドが開く時間の対策を考える。

・最大の含み損をいくらにするかは十分検討し、テストして下さい。
 3連続まけるといくら必要か、注して資金管理して下さい。

・なお自分のパソコンでトラブルが心配でしたら、
 レンタルサーバーを借りて稼動させることもできます。

・証券会社がトラブルで決済できなくなることも考えられます。
 そのときの対策も考えておいて下さい。

決済エラーが生じる証券会社は早めに撤退すべきです。 
日本の証券会社はMT4についてはあまりいい評判は聞かないです。 
運用では注意しましょう。

     証拠金規制

   
   --------------------------
   ・limit、stop使用例 

   ・未来の予想について

   ・平均線の検討   

   ・過去データの取得 

   ・売買の予測