mt4 (MetaTrader4)使い倒シストレ

メタトレーダー、自作インジケータ、自作EAで完全自動売買。使えるものは何でも使え。
インジケーター、EA(自動売買システム)製作のご依頼はこちらへ
Googolyen FX Factory
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


にほんブログ村 為替ブログ FX システムトレード派へ
--/--/--(--) --:--:-- | スポンサー広告 | Trackback(-) | Comment(-)
OrderSwap
double OrderSwap()

現在選択されているオーダーのスワップを返す。
Note:オーダーはOrderSelect()関数によって事前に選択されていなければならない。

Sample:
  if(OrderSelect(order_id, SELECT_BY_TICKET)==true)
    Print("Swap for the order #", order_id, " ",OrderSwap());
  else
    Print("OrderSelect failed error code is",GetLastError());


にほんブログ村 為替ブログ FX システムトレード派へ
スポンサーサイト
OrdersTotal
int OrdersTotal()

有効、未決注文の数を返す。

Sample:
  int handle=FileOpen("OrdersReport.csv",FILE_WRITE|FILE_CSV,"\t");
  if(handle<0) return(0);
  // write header
  FileWrite(handle,"#","open price","open time","symbol","lots");
  int total=OrdersTotal();
  // write open orders
  for(int pos=0;pos< total;pos++)
    {
     if(OrderSelect(pos,SELECT_BY_POS)==false) continue;
     FileWrite(handle,OrderTicket(),OrderOpenPrice(),
               OrderOpenTime(),OrderSymbol(),OrderLots());
    }
  FileClose(handle);


にほんブログ村 為替ブログ FX システムトレード派へ
OrderStopLoss
double OrderStopLoss()

現在選択されているオーダーのストップロス値を返す。
Note:オーダーはOrderSelect()関数によって事前に選択されていなければならない。

Sample:
  if(OrderSelect(ticket,SELECT_BY_POS)==true)
    Print("Stop loss value for the order 10 ", OrderStopLoss());
  else
    Print("OrderSelect failed error code is",GetLastError());


にほんブログ村 為替ブログ FX システムトレード派へ
OrdersHistoryTotal
int OrdersHistoryTotal()

端末内から読み込めるアカウントヒストリー内の決済された注文の数を返す。
ヒストリーリストサイズは端末の"Account history"タブの設定に依存する。

Sample:
  // retrieving info from trade history
  int i,hstTotal=OrdersHistoryTotal();
  for(i=0;i< hstTotal;i++)
    {
     //---- check selection result
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
       {
        Print("Access to history failed with error (",GetLastError(),")");
        break;
       }
     // some work with order
    }


にほんブログ村 為替ブログ FX システムトレード派へ
OrderSend
int OrderSend(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration, color Color=CLR_NONE)

注文や未決注文をするための主関数
トレードサーバによって挿入されたチケット番号を返し、もし失敗すれば-1を返す。
エラー情報の詳細を得たい場合はGetLastError()関数を呼び出す。
Notes:注文(OP_SELLやOP_BUY)する際、Bid(売値)、Ask(買値)の最新の価格しかオープン価格に用いることはできない。もし現在の値を用いて安全に取引をするなら、MaketInfo()関数にMODE_BID、MODE_ASK変数を指定すればよい。
計算済みや正規化されていない価格は適用できない。
もしスレッド価格に要求したエントリー価格が無かったり、小数点以下の桁数が一致していない非正規価格だった場合、129 (ERR_INVALID_PRICE)エラーが生成される。
もしオーダー価格があまりにも古いものならば、slippage変数に関係なく138 (ERR_REQUOTE)エラーを生成する。
もしオーダー価格があまりにも古いが、スレッドに存在している場合、price+-slippageの範囲以内に現在の価格があるならば、その価格で約定されるだろう。

ストップロス値と利確値は市場価格とあまりに近くすることはできない。ストップロス値と価格の最低差はMakertInfo()関数にMODE_STOPLEVEL変数を付けることで得られる。もし間違えたり非正規ストップロス値の場合は、130 (ERR_INVALID_STOPS))エラーが生成される。

未決注文を置く場合、そのオープン価格を市場価格とあまりに近くすることはできない。未決注文と価格の最低差はMakertInfo()関数にMODE_STOPLEVEL変数を付けることで得られる。未決注文のオープン価格を失敗した場合、130 (ERR_INVALID_STOPS))エラーが生成される。

未決注文の有効期限が使えないトレードサーバもある。この場合、expiration変数に0でない値を指定すると、147(ERR_TRADE_EXPIRATION_DENIED)エラーを生成する。

あるトレードサーバでは、注文と未決注文の総数に制限を設けているところもある。もしその制限を超えてしまうと、新しいポジションを持つこと(未決注文を置くこと)はできず、トレードサーバから148 (ERR_TRADE_TOO_MANY_ORDERS))エラーが返ってくる。

Parameters:
symbol       -   通貨
cmd           -   取引タイプ。取引操作子のどれか。
volume       -   ロット数
price        -   オープン価格
slippage     -   スリッページ
stoploss     -   ストップロス値
takeprofit   -   利確値
comment       -   コメント。コメントの最後の部分はサーバーによって変更される。
magic         -   オーダー識別番号。ユーザ定義の識別番号。
expiration   -   有効期限
arrow_color  -   チャート上の矢印の色。
              もしこの変数が間違っているかCLR_NONE値であれば
              チャート上に何も描かれない。
Sample:
  int ticket;
  if(iRSI(NULL,0,14,PRICE_CLOSE,0)<25)
    {
     ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Ask-25*Point,
                      Ask+25*Point,"My order #2",16384,0,Green);
     if(ticket<0)
       {
        Print("OrderSend failed with error #",GetLastError());
        return(0);
       }
    }



にほんブログ村 為替ブログ FX システムトレード派へ
OrderSelect
bool OrderSelect(int index, int select, int pool=MODE_TRADES)

この関数はオーダーを深く処理する為にオーダーを選択する。
もしTRUEが返れば、成功した。もしFALSEが返れば、失敗している。
エラー情報の詳細を得たい場合はGetLastError()関数を呼び出す。
もしチケット番号によってオーダーが選択されるならば、pool変数は無視される。
チケット番号とは重複しないオーダー識別である。選択済みのオーダーリストから見つけるためには、クローズ時間を解析しなければならない。
もしクローズ時間が0ならば、そのオーダーはまだ有効か未決であり、端末の有効ポジションリストから取得される。
それはオーダータイプ毎の未決オーダーから有効ポジションを区別することができる。
もしオーダーのクローズ時間が0以外なら、そのオーダーは決済されたか、削除されたものであり、ターミナルヒストリーから選択される。
それらもまたオーダータイプ毎に異なる。 現在選択されているオーダーの手数料を返す。

Parameters:
index    -   オーダー番号か2番目の引数に依存するオーダーチケット
select      -   選択フラグ。これは以下の値をとる:
                 SELECT_BY_POS - オーダー番号
                 SELECT_BY_TICKET - チケット番号
pool=MODE_TRADES  -   オーダー番号の選択。
                         SELECT_BY_POSを指定した時に用いる。これらは以下の値をとる:
                         MODE_TRADES(デフォルト) - 有効ポジションリストから選択される
                         MODE_HISTORY - ヒストリーリストから選択される

Sample:
  if(OrderSelect(12470, SELECT_BY_TICKET)==true)
    {
     Print("order #12470 open price is ", OrderOpenPrice());
     Print("order #12470 close price is ", OrderClosePrice());
    }
  else
    Print("OrderSelect returned the error of ",GetLastError());


にほんブログ村 為替ブログ FX システムトレード派へ
OrderProfit
double OrderProfit()

現在選択されているオーダーの収益(スワップ、手数料は除く)を返す。
決済していないポジションでは、未確定の収益である。
決済済みポジションでは決定した収益である。
現在選択されているオーダーの収益を返す。
Note:オーダーはOrderSelect()関数によって事前に選択されていなければならない。

Sample:
  if(OrderSelect(10, SELECT_BY_POS)==true)
    Print("Profit for the order 10 ",OrderProfit());
  else
    Print("OrderSelect returned the error of ",GetLastError());


にほんブログ村 為替ブログ FX システムトレード派へ
OrderPrint
void OrderPrint()

現在選択されているオーダーの情報を以下のフォーマットでログに出力する。
チケット番号;オープン時間;トレードタイプ;ロット数;オープン価格;ストップロス値;利確値;クローズ時間;クローズ価格;手数料;スワップ;収益;コメント;識別番号;有効期限
オーダーはOrderSelect()関数によって事前に選択されていなければならない。

Sample:
  if(OrderSelect(10, SELECT_BY_TICKET)==true)
    OrderPrint();
  else
    Print("OrderSelect failed error code is",GetLastError());


にほんブログ村 為替ブログ FX システムトレード派へ
OrderOpenTime
datetime OrderOpenTime()

現在選択されているオーダーのオープン時間を返す。
Note:オーダーはOrderSelect()関数によって事前に選択されていなければならない。

Sample:
  if(OrderSelect(10, SELECT_BY_POS)==true)
    Print("open time for the order 10 ",OrderOpenTime());
  else
    Print("OrderSelect returned error of ",GetLastError());


にほんブログ村 為替ブログ FX システムトレード派へ
OrderOpenPrice
double OrderOpenPrice()

現在選択されているオーダーのオープン価格を返す。
Note:オーダーはOrderSelect()関数によって事前に選択されていなければならない。

Sample:
  if(OrderSelect(10, SELECT_BY_POS)==true)
    Print("open price for the order 10 ",OrderOpenPrice());
  else
    Print("OrderSelect returned the error of ",GetLastError());


にほんブログ村 為替ブログ FX システムトレード派へ
OrderModify
bool OrderModify( int ticket, double price, double stoploss, double takeprofit, datetime expiration, color Color=CLR_NONE)

前回開いたポジションや未決オーダーを修正する。
もし成功すれば、この関数はTRUEを返す。
もし失敗すれば、この関数はFALSEを返す。
エラー情報の詳細を得たい場合はGetLastError()関数を呼び出す。
Notes:指定価格と有効期限は未決オーダーでのみ変更できる。
もし関数に指定した値で変更されなかった場合、1(ERR_NO_RESULT)エラーが生成される。
未決決済の有効期限が使えないトレードサーバもある。この場合、expiration変数に0でない値を指定すると、147(ERR_TRADE_EXPIRATION_DENIED)エラーを生成する。

Parameters:
ticket    -   重複しないオーダーチケット
price      -   未決オーダーのエントリー価格
stoploss     -   ストップロス値
takeprofit  -   利確値
expiration  -   有効期限
Color     -   チャート上の決済矢印の色。
              もしこの変数が間違っているかCLR_NONE値であれば
              チャート上に何も描かれない。
Sample:
  if(TrailingStop>0)
    {
     OrderSelect(12345,SELECT_BY_TICKET);
     if(Bid-OrderOpenPrice()>Point*TrailingStop)
       {
        if(OrderStopLoss()< Bid-Point*TrailingStop)
          {
           OrderModify(OrderTicket(),OrderOpenPrice(),
                       Bid-Point*TrailingStop,OrderTakeProfit(),0,Blue);
           return(0);
          }
       }
    }


にほんブログ村 為替ブログ FX システムトレード派へ
OrderMagicNumber
int OrderMagicNumber()

現在選択されているオーダーの識別番号を返す。
Note:オーダーはOrderSelect()関数によって事前に選択されていなければならない。

Sample:
  if(OrderSelect(10,SELECT_BY_POS)==true)
    Print("Magic number for the order 10 ", OrderMagicNumber());
  else
    Print("OrderSelect returned error of ",GetLastError());


にほんブログ村 為替ブログ FX システムトレード派へ
OrderLots
double OrderLots()

現在選択されているオーダーのロット数を返す。
Note:オーダーはOrderSelect()関数によって事前に選択されていなければならない。

Sample:
  if(OrderSelect(10,SELECT_BY_POS)==true)
    Print("lots for the order 10 ",OrderLots());
  else
    Print("OrderSelect returned error of ",GetLastError());


にほんブログ村 為替ブログ FX システムトレード派へ
OrderExpiration
datetime OrderExpiration()

現在選択されているオーダーの有効期限を返す。
Note:オーダーはOrderSelect()関数によって事前に選択されていなければならない。

Sample:
  if(OrderSelect(10, SELECT_BY_TICKET)==true)
    Print("Order expiration for the order #10 is ",OrderExpiration());
  else
    Print("OrderSelect returned error of ",GetLastError());


にほんブログ村 為替ブログ FX システムトレード派へ
OrderDelete
bool OrderDelete( int ticket, color Color=CLR_NONE)

前回開いた未決注文を削除する。
もし成功すれば、この関数はTRUEを返す。
もし失敗すれば、この関数はFALSEを返す。
エラー情報の詳細を得たい場合はGetLastError()関数を呼び出す。
Parameters:
ticket    -   重複しないオーダーチケット番号
Color     -   チャート上の決済矢印の色。
              もしこの変数が間違っているかCLR_NONE値であれば
              チャート上に何も描かれない。
Sample:
  if(Ask>var1)
    {
     OrderDelete(order_ticket);
     return(0);
    }


にほんブログ村 為替ブログ FX システムトレード派へ
OrderCommission
double OrderCommission()

現在選択されているオーダーの手数料を返す。
Note:オーダーはOrderSelect()関数によって事前に選択されていなければならない。

Sample:
  if(OrderSelect(10,SELECT_BY_POS)==true)
    Print("Commission for the order 10 ",OrderCommission());
  else
    Print("OrderSelect failed error code is",GetLastError());


にほんブログ村 為替ブログ FX システムトレード派へ
OrderComment
string OrderComment()

現在選択されているオーダーのコメントを返す。
Note:オーダーはOrderSelect()関数によって事前に選択されていなければならない。

Sample:
  string comment;
  if(OrderSelect(10,SELECT_BY_TICKET)==false)
    {
     Print("OrderSelect failed error code is",GetLastError());
     return(0);
    }
  comment = OrderComment();
  // ...


にほんブログ村 為替ブログ FX システムトレード派へ
OrderCloseTime
datetime OrderCloseTime()

現在選択されているオーダーのクローズ時間を返す。
もしオーダーのクローズ時間が0でなければ、オーダーは選択され、決済されており、アカウントヒストリーからデータを回収する。
保有中や未決注文のクローズ時間は0である。
Note:オーダーはOrderSelect()関数によって事前に選択されていなければならない。

Sample:
  if(OrderSelect(10,SELECT_BY_POS,MODE_HISTORY)==true)
    {
     datetime ctm=OrderOpenTime();
     if(ctm>0) Print("Open time for the order 10 ", ctm);
     ctm=OrderCloseTime();
     if(ctm>0) Print("Close time for the order 10 ", ctm);
    }
  else
    Print("OrderSelect failed error code is",GetLastError());


にほんブログ村 為替ブログ FX システムトレード派へ
OrderClosePrice
double OrderClosePrice()

現在選択されているオーダーのクローズ価格を返す。
Note:オーダーはOrderSelect()関数によって事前に選択されていなければならない。

Sample:
  if(OrderSelect(ticket,SELECT_BY_POS)==true)
    Print("Close price for the order ",ticket," = ",OrderClosePrice());
  else
    Print("OrderSelect failed error code is",GetLastError());


にほんブログ村 為替ブログ FX システムトレード派へ
OrderCloseBy
bool OrderCloseBy( int ticket, int opposite, color Color=CLR_NONE)

逆方向のポジション(BUYとSELL、SELLとBUY)を同時に閉じる。
もし成功すれば、この関数はTRUEを返す。
もし失敗すれば、この関数はFALSEを返す。
エラー情報の詳細を得たい場合はGetLastError()関数を呼び出す。
Parameters:
ticket    -   重複しないオーダーチケット番号
lots      -   重複しない逆方向オーダーチケット番号
Color     -   チャート上の決済矢印の色。
              もしこの変数が間違っているかCLR_NONE値であれば
              チャート上に何も描かれない。
Sample:
  if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75)
    {
     OrderCloseBy(order_id,opposite_id);
     return(0);
    }


にほんブログ村 為替ブログ FX システムトレード派へ
OrderClose
bool OrderClose( int ticket, double lots, double price, int slippage, color Color=CLR_NONE)

ポジションを閉じる。
もし成功すれば、この関数はTRUEを返す。
もし失敗すれば、この関数はFALSEを返す。
エラー情報の詳細を得たい場合はGetLastError()関数を呼び出す。
Parameters:
ticket    -   重複しないオーダーチケット
lots      -   ロット数
price     -   決済したい価格
slippage  -   最大スリッページポイント
Color     -   チャート上の決済矢印の色。
              もしこの変数が間違っているかCLR_NONE値であれば
              チャート上に何も描かれない。
Sample:
  if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75)
    {
     OrderClose(order_id,1,Ask,3,Red);
     return(0);
    }


にほんブログ村 為替ブログ FX システムトレード派へ
Execution errors
いくつかのトレード操作(OrderSend()、OrderClose()、OrderCloseBy()、OrderDelete()、OrderDelete()、OrderModify関数)は失敗する可能性があり、その時エラーとなり、負のチケット番号かFALSEを返す。
失敗した理由を特定するには、GetLastError()関数を呼び出す。
全てのエラーは特別な方法によって処理されなければならない。
最も普通の提案を以下に示す。

エラーコードはトレードサーバから返される。
定数 説明
ERR_NO_ERROR 0 トレード処理成功
ERR_NO_RESULT 1 OrderModify()はすでに設定された値と同じ値を設定しようと試みる。一つ以上の値は変更されるべきであり、修正行為は繰り返すことができる。
ERR_COMMON_ERROR 2 共通エラー。トレードは原因が明確になるまでストップする。もしかするとOSやクライアント端末の再起動が必要。
ERR_INVALID_TRADE_PARAMETERS 3 無効なトレード変数がトレード関数に渡された。例えば不正な通貨、未知のトレード操作子、負のスリッページ、存在しないチケット番号、等。プログラムのロジックを変更しなければならない。
ERR_SERVER_BUSY 4 トレードサーバがビジー状態。ある程度(数分以上)時間が経った後に再度試みる。
ERR_OLD_VERSION 5 クライアント端末が古いバージョン。最新のクライアント端末をインストールしなければならない。
ERR_NO_CONNECTION 6 トレードサーバと接続できない。接続の切断を確認する(例えばIsConnected()関数を使う)必要があり、数秒(5秒以上)後、再接続を試みる。
ERR_TOO_FREQUENT_REQUESTS 8 要求が多すぎる。要求の頻度を少なくするように、プログラムロジックを変更しなければならない。
ERR_ACCOUNT_DISABLED 64 アカウント無効。全てのトレードを停止すべき。
ERR_INVALID_ACCOUNT 65 無効なアカウント。全てのトレードを停止すべき。
ERR_TRADE_TIMEOUT 128 トレード時間切れが迫っている。エントリー前(遅くとも1分前)にトレードが成功していないか(新しいポジションが開いていない、存在する注文が修正されていない、削除されていない。ポジションが閉じていない)を確認する必要がある。
ERR_INVALID_PRICE 129 無効な価格値か正規化されていない価格。5秒後、RefreshRates()関数を用いてデータの更新をした後、再度試みる。もし、エラーが無くならなければ、トレードを停止し、プログラムロジックを変更しなければならない。
ERR_INVALID_STOPS 130 ストップ値が非常に近い、もしくは価格が不正か注文価格が正規化されていない。もし価格の衰微が原因でエラーが起きただけなら、試みを繰り返すことができる。5秒後、RefreshRates()関数を用いてデータの更新をした後、再度試みる。もし、エラーが無くならなければ、トレードを停止し、プログラムロジックを変更しなければならない。
ERR_INVALID_TRADE_VOLUME 131 無効なロット数で、精度に問題がある。全てのトレードを停止し、プログラムロジックを変更しなければならない。
ERR_MARKET_CLOSED 132 市場が閉じている。ある程度(数分以上)時間が経った後に再度試みる。
ERR_TRADE_DISABLED 133 トレード無効化。全てのトレードを停止するべき。
ERR_NOT_ENOUGH_MONEY 134 売買するための十分な資金が無い。同じ変数でのトレードでは再試行できない。5秒後にロット数を落として再試行する。しかし売買を完了するのに十分な資金があることを確認する必要がある。
ERR_PRICE_CHANGED 135 価格値が変更された。RefreshRates()関数を用いて、すぐにデータの更新をし、再試行する。
ERR_OFF_QUOTES 136 相場価格が無い。何かの原因(例えば、セッションが始まってからの価格ではない、正規化されていない価格、市場より早い)によって、仲介業者がその価格を提供せず、拒否している。5秒後、RefreshRates()関数を用いてデータの更新をした後、再度試みる。。もし、エラーが無くならなければ、トレードを停止し、プログラムロジックを変更しなければならない。
ERR_REQUOTE 138 指定した価格が時間外の価格、またはbidとaskがごちゃ混ぜになっている。RefreshRates()関数を用いて、すぐにデータの更新をし、再試行する。もし、エラーが無くならなければ、トレードを停止し、プログラムロジックを変更しなければならない。
ERR_ORDER_LOCKED 139 注文がロックされている。全てのトレードを停止し、プログラムロジックを変更しなければならない。
ERR_LONG_POSITIONS_ONLY_ALLOWED 140 買いポジションだけ許されている。SELL操作子で再試行することはできない。
ERR_TOO_MANY_REQUESTS 141 要求が多すぎる。要求の頻度を少なくするように、プログラムロジックを変更しなければならない。

142 その注文は仲介業者の実行待ち状態である。エラーではないが、クライアント端末とトレードサーバ間の相互作用コードである。このコードは稀にしか得ることができず、売買操作の実行中に接続切断、再接続が起きた時にしか得ることができない。このコードはエラー128と同じように処理するべきである。

143 注文が仲介業者に受け入れられた。クライアント端末とトレードサーバ間の相互作用コードである。コード142と同様の理由で現れる。このコードはエラー128と同じように処理するべきである。

144 注文がクライアント側の確認作業によって破棄された。クライアント端末とトレードサーバ間の相互作用コードである。
ERR_TRADE_MODIFY_DENIED 145 オーダー値が市場値と近く、すぐに実行することができないので修正が拒否された。RefreshRates()関数を用いて、15秒後にデータの更新をし、その後再試行する。
ERR_TRADE_CONTEXT_BUSY 146 トレード状況がビジー状態。IsTradeContextBusy()関数がFALSEを返す場合だけ再試行する。
ERR_TRADE_EXPIRATION_DENIED 147 期限切れの注文を使用したため、仲介業者によって破棄された。有効期限がゼロ化されているなら、再試行することができる。
ERR_TRADE_TOO_MANY_ORDERS 148 オーダー数が仲介側の設定した限度を超えている。存在するポジションやオーダーを閉じるか、削除した後にだけ、新しいポジションや未決注文を置くことができる。


にほんブログ村 為替ブログ FX システムトレード派へ
Trading functions
トレードを担う関数群。

OrderSend()OrderClose()OrderCloseBy()OrderDelete()OrderModify()、関数はカスタムインジケータから呼び出すことはできない。

トレード関数はエキスパートかスクリプト内でしか使えない。
トレード関数は"Allow live trading"プロパティにチェックが入っている場合だけ、呼び出すことができる。

エキスパートやスクリプトからトレードをするには、プログラムのトレード状況(エキスパートやスクリプトからの自動売買)に一つのスレッドしか与えられない。
なぜならば、もしこの状況がエキスパート売買によって占領されていれば、他のエキスパートやスクリプトは146 (ERR_TRADE_CONTEXT_BUSY)エラーが原因でしばらくの間、トレード関数を呼び出すことができないからである。
トレードの不可をチェックするにはIsTradeAllowed()関数を用いる。
トレード状況へのアクセス占有をクリアするために、GlobalVariableSetOnCondition()関数を用いて変更すべきグローバル変数値を基本とするセマフォを使うことができる。



にほんブログ村 為替ブログ FX システムトレード派へ
Designed by aykm.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。