エラー130を地獄に落とす

 

SLの幅は十分で、マーケットの右側にあることを確認しました(つまり、買いの場合は下)。 どんな助けでも大いに感謝しますし、大きな安心感を得られます* sigh

if(BUYING)
{
if(stoploss > 0) /SLは35に設定されています。
realSL = Ask - (stoploss * Point);
if(takeprofit > 0)
realTP = Ask + takeprofit * Point;
//買い!
ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, slippage, realSL, realTP, nameEA, 887722,0,Red).if(ticket<0).if(ticket<0);

if(ticket < 0)
Print("OrderSend (",nameEA,") failed with error #", GetLastError()).Print("OrderSend (",nameEA,") failed with error #", GetLastError());
Alert("CODE_TEST: BUY BUY");

ありがとうございました。

パット

 
FXpipclash:

SLの幅は十分で、マーケットの右側にあることを確認しました(つまり、買いの場合は下)。 どんな助けでも大いに感謝しますし、大きな安心感を得られます* sigh

if(BUYING)
{
if(stoploss > 0) /SLは35に設定されます。
realSL = Ask - (stoploss * Point);
if(takeprofit > 0)
realTP = Ask + takeprofit * Point;
//買い!
ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, slippage, realSL, realTP, nameEA, 887722,0,Red);

if(ticket < 0)
Print("OrderSend (",nameEA,") failed with error #", GetLastError()).Print("OrderSend (",nameEA,") failed with error #", GetLastError());
Alert("CODE_TEST: BUY BUY");

ありがとうございました。

パット

これを試してみてください...BidとAskを混同しているのでは?


if(BUYING)
{
if(stoploss > 0) /SLは35に設定されます。
realSL =Bid-(stoploss * Point);
if(takeprofit > 0)
realTP =Bid+ takeprofit * Point;
//買い!
ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, slippage, realSL, realTP, nameEA, 887722,0,Red);

if(ticket < 0)
Print("OrderSend (",nameEA,") failed with error #", GetLastError()).Print("OrderSend (",nameEA,") failed with error #", GetLastError());
Alert("CODE_TEST: BUY BUY BUY");



************************************

経験則から言うと、アスクでエントリーした場合はビッドで、ビッドでエントリーした場合はアスクでエグジットします。


LongStop =Bid-(stoploss*Point)

LongLimit =Bid+(limit*Point) です。

ロングエントリー = ASK

LongTrail =Bid-(stoploss*Point)



ShortStop = Ask+(stoploss*Point)

ショートリミット = アスク-(リミット*ポイント)

ショートエントリー = ビッド

ショートトレイル = アスク+(ストップロス*ポイント)




シーウルフ

 
seawolf wrote>>

これを試してみてください...BidとAskを使うタイミングがごっちゃになっているような気がします

if(BUYING)
{
if(stoploss > 0) /SLは35に設定されています。
realSL =Bid-(stoploss * Point);
if(takeprofit > 0)
realTP =Bid+ takeprofit * Point;
//買い!
ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, slippage, realSL, realTP, nameEA, 887722,0,Red)。

if(ticket < 0)
Print("OrderSend (",nameEA,") failed with error #", GetLastError()).Print("OrderSend (",nameEA,") failed with error #", GetLastError());
Alert("CODE_TEST: BUY BUY");

************************************

経験則ですが、アスクでエントリーした場合はビッドで、ビッドでエントリーした場合はアスクでエグジットします。

LongStop = Bid-(Stoploss*Point)

LongLimit =Bid+(limit*Point)

ロングエントリー=ASK

LongTrail = Bid-(stoploss*Point)

ShortStop = Ask+(stoploss*Point)

ショートリミット = アスク-(リミット*ポイント)

ショートエントリー = ビッド

ショートトレイル = アスク+(ストップロス*ポイント)

シーウルフ

seawolfさん、ご返答ありがとうございます。では、私のオリジナルのコードでは、もし私が買うつもりなら、アスク価格を計算に使うべきではないでしょうか?

 
ブローカーは誰ですか?
 

このような場合、askをエントリーやエグジットに使用するのは絶対に間違っています。


私の経験則に従えば、すべてうまくいくでしょう。私はこれをホワイトボードに書き、長年トレードとプログラミングに携わってきた今でも、ほぼ毎日のように参考にしています。私は、それを正しく理解していない多くの記事を発見したので、悪く思わないでください。

 

こんにちは。

アスクの代わりにビッドを使って購入しているため、元のコードは間違っていますが、ストップロスが本当に35ポイントであれば、まだ機能しているはずです。システム上では小数点以下5桁まで変更されていないことを確認し、そうでなければストップロスは350ポイントであるべきです。インターバンクはデモでは小数点以下5桁で動いていましたが、ライブでは4桁で動いていたことがあります。

 
FXpipclash:

SLの幅は十分で、マーケットの右側にあることを確認しました(つまり、買いの場合は下)。どんな助けでも、とてもありがたいし、大きな安心感を得ることができます。

if(BUYING)
{
if(stoploss > 0) /SLは35に設定
realSL = Ask - (stoploss * Point);
if(takeprofit > 0)
realTP = Ask + takeprofit * Point;
//BUYING!!!!
ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, slippage, realSL, realTP, nameEA, 887722,0,Red);

if(ticket < 0)
Print("OrderSend (",nameEA,") failed with error #", GetLastError());
Alert("CODE_TEST: BUY BUY").を実行。

ありがとうございました。

パット

SeawolfとRuptorが言っていることは、断言できます。

OP_BUY注文の場合、アスク価格を使用してエントリー価格とストップを生成するのは全く正しいことです。

注文を出す前に、Print("realSL =, "DoubleToStr(realSL,Digits)," realTP=",DoubleToStr(realTP,Digits)) を使ってストップの値をチェックし、値が予想通りであることを確認する必要があるのです。もし、期待通りの値であれば、MarketInfo()関数で MODE_STOPLEVEL 識別子を使用して許容値を確認する必要があります。

 
5桁のブローカーをお使いでしょうか?もしそうなら、あなたの「ポイント」変数は、あなたのすべてのSL/TPを実際の値の1/10にすることになります。
 
cloudbreaker wrote>>

SeawolfとRuptorが言っていることは、はっきり言って間違いありません。

OP_BUY注文の場合、Ask価格を使用してエントリー価格とストップを生成するのはまったく正しいことです。

注文を出す前に、Print("realSL =, "DoubleToStr(realSL,Digits)," realTP=",DoubleToStr(realTP,Digits)) を使ってストップ値をチェックし、値が予想通りであることを確認する必要があるのです。もし期待通りの値であれば、MarketInfo()関数でMODE_STOPLEVEL識別子を使用して許容値を確認する必要があります。

Cloudbreakerさん、ありがとうございます、アスクを支払うのは正しいと思いました。

 
eacoder wrote>>
5桁のブローカーを使っているのですか?もしそうなら、あなたの "Point "変数が、あなたのSL/TPをすべて実際の値の1/10にすることになります。

いいえ、私は4桁のブローカーであるFXDDを使用しています、全体が私にはむしろ謎です、私は試してみるつもりです。

 
FXpipclash wrote>>

Cloudbreakerさん、ありがとうございます、アスクを支払うのは正しいと思いました。

この問題には苦労させられましたが、解決できたと思います。なぜかTPとSLが両方とも1.0として再計算されるので(小さすぎる)、プロセス全体を通して変数をトレースしてみると、takeprofitとstoplossの値をdoubleとして、realSL realTP値を整数として宣言していたことに気づきました。

理由: