注文を送るのが難しい。 - ページ 3

 
CT Tradeのようですね。
 
動的なロットサイズが気に入らないのでしょうか?固定ロットで取引しているときはうまくいくのですが。
 
MetaNt:
動的なロットサイズには対応していないのでしょうか?固定ロットで取引しているときはうまくいくのですが。

CTradeは OrderSend()のラッパーです。

ボリュームが0.07や1であっても動作しないと書かれていますが、どのように定義されているのでしょうか?Lot=0.07 ?

 
angevoyageur:

CTradeはOrderSend()のラッパーです。

ボリュームが0.07や1であっても動作しないと書かれていますが、どのように定義されているのでしょうか?Lot=0.07 ?

Mqlrequest と Mqlresult を正しく書いたかどうか自信がなかったので、代わりに CTrade を使いました。固定ボリュームを使えば動くことがわかり、今、固定ボリュームに整数を掛けることはできますが、分数でボリュームを変更しようとすると、無効なロットサイズなどのエラーが発生し、変更したロットサイズの結果は[invalid volume] というエラーで印刷されます。
 
ある程度複雑な小数なので、doubleを正規化してみます。
 
MetaNt:
ある程度複雑な小数なので、normalize doubleを試してみます。
Normalize doubleは複雑な小数の修正を提供しています、私は私の動的ロットでそれを試してみます。
 
MetaNt:
Normalize doubleは複雑な小数の修正を提供してくれています、私のダイナミックロットで試してみます。

固定されています。

どうやらCTのBuy/Sellの外側にある方程式からのスケーリングファクタの1つだったようです。 mql4では遭遇したことのない問題だったので、それを見つけるのに時間がかかりました。

この問題がある人は、NormalizeDouble()関 数の桁の部分に2を使ってください

 

007と言いますか?

ボンドに聞くべきでしょう ;-)

 

ここでも同じ問題に遭遇しているようです。私はロットサイズがSYMBOL_VOLUME_MIN、SYMBOL_VOLUME_MAX、SYMBOL_VOLUME_STEPの 要件を満たしていることを確認しました。

例えばこんな感じです。

2014.04.07 14:49:35 2014.04.04 16:00:00 CTrade::OrderSend: instant sell 0.53 EURUSD at 1.36934 sl: 1.37434 tp: 1.35934 [invalid volume].

このシンボルとこれらの仕様でEAをバックテストしている間。


注文を送信するために使用しているコードは次のとおりです。

int    losses=1;
int    DecimalPoints=2;
 double Risk=0.03;
double Inc=0.1;
my_symbol=Symbol();
leverage=AccountInfoInteger(ACCOUNT_LEVERAGE);
contract=SymbolInfoDouble(my_symbol,SYMBOL_TRADE_CONTRACT_SIZE);
min_lot=SymbolInfoDouble(my_symbol,SYMBOL_VOLUME_MIN);
max_lot=SymbolInfoDouble(my_symbol,SYMBOL_VOLUME_MAX);
trade_size=equity*(Risk/100)*leverage;
trade_size/=contract;
trade_size+=losses*Inc;
NormalizeDouble(trade_size,DecimalPoints);
  if(trade_size<min_lot)
    {
     trade_size=min_lot;
    }
  else if(trade_size>max_lot)
    {
     trade_size=max_lot;
    }
trade.Sell(trade_size,my_symbol,price,0,price-tp,"Expert Sell");

EDIT:

もちろん、この正確なロットサイズで手動で取引を行うことができます。

 
Candles:

私はここで同じ問題に遭遇しているようです。ロットサイズがSYMBOL_VOLUME_MIN、SYMBOL_VOLUME_MAX、SYMBOL_VOLUME_STEPの 条件を満たしていることは確認済みです。

例えばこんな感じです。

2014.04.07 14:49:35 2014.04.04 16:00:00 CTrade::OrderSend: instant sell 0.53 EURUSD at 1.36934 sl: 1.37434 tp: 1.35934 [invalid volume].

このシンボルとこれらの仕様でEAをバックテストしている間。


注文を送信するために使用しているコードは次のとおりです。

EDIT。

もちろん、この正確なロットサイズで手動で取引を行うことができます。

この行は、効果なしです。

NormalizeDouble(trade_size,DecimalPoints);

あなたは、変数に結果を影響する必要があり、NormalizeDoubleの ドキュメントを参照してください。

trade_size=NormalizeDouble(trade_size,DecimalPoints);