コーディングのヘルプ - ページ 157

 
mladen:
クリストフ

そうすれば、Decimals変数もOKになるはずです

いずれにせよ、注文(部分)決済に失敗した場合、どのようなエラーコードが表示されるのか確認してください。

Mladenです。

ヒントをありがとうございます。

問題は、エラーメッセージがないことです。うまくいかないときは、まるでPartialTP関数が 呼ばれていないかのように見えます。他の時-通常、EA再起動後の最初の注文で-はうまくいきます。

変数の1つがゼロ値に戻らないとか、そのようなことを考えたのですが、まだバグを見つけることができません。

 
chrisstoff:
ムラデン

ヒントをありがとうございました。

問題は、エラーメッセージがないことです。うまくいかないときは、まるでPartialTP関数が呼び出されていないかのように見えます。他の時 - 通常、EA再起動後の最初の注文で - それはうまく動作します。

変数の1つがゼロ値に戻らないとか、そういうことかと思ったのですが、まだバグを見つけられずにいます。

クリスストッフ

申し訳ありませんが、部分的なコードでは、これ以上お役に立てません。

あなたが言っていることは、コードをデバッグする必要があることを意味します - そしてそれは、ある種の制御 点を使用しながらそれを実行することによってのみ行うことができます

 
mladen:
クリスストッフ

申し訳ありませんが、部分的なコードで、私はより多くの助けをすることはできません。

あなたが言っていることは、コードをデバッグする必要があるということで、それはある種の制御点を使用しながら実行することによってのみ可能です。

Mladenさん、ありがとうございます。

コードに問題がなかったということで、心強いです。

コードの関連する部分はすべて投稿されたと思うので、他の場所でバグを見つける必要があります。

 
mladen:
ホック87

その問題の解決策については、あなたの投稿の上の投稿をお読みください。

そのための完全なコードは次のとおりです。

int TotalOrders = 0;

for (int i=0; i <= OrdersTotal(); i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0);

stop=(Ask-stopsize*Point);

prof=(Ask+profsize*Point);

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

モルデンです。

もし私が 口座残高の パーセンテージでロットサイズをオープンしたい場合、どのようにコード化するのでしょうか?

私の口座残高が500ドルです。

私は5%のロットサイズを開きたい、そしてそれは自動カウントと$ 0.25ロット、TP=10 SL=20を開く。

どのようにそれをコード化するには?

ありがとうございます。

 
hock87:
Maldenです。

口座残高の何%かのロットサイズをオープンしたい場合、どのようにコード化すればよいですか?

私の口座残高は500ドルです。

私は5%のロットサイズを開きたい、それは自動カウントと$ 0.25ロット、TP = 10 SL = 20を開く。

どのようにそれをコード化するのですか?

ありがとうございます。

あなたはそれのためにこのような関数を 使用することができます。

double getLots(double stopLoss, double risk)

{

RefreshRates();

double pPoint = MarketInfo(Symbol(),MODE_POINT);

double step = MarketInfo(Symbol(),MODE_LOTSTEP);

double minLot = MarketInfo(Symbol()l,MODE_MINLOT);

double maxLot = MarketInfo(Symbol(),MODE_MAXLOT);

double lots = minLot;

if (risk>0 && stopLoss>0)

{

lots = AccountFreeMargin()*(risk/100.0)/(stopLoss*MarketInfo(s_symbol,MODE_TICKVALUE)/pPoint);

}

}

return(MathMax(MathMin(lots,maxLot),minLot));

}

PS: stopLoss は関数に pips/points で渡さなければなりません (整数値ではありません)。

 
mladen:
このような関数を使用することができます。
double getLots(double stopLoss, double risk)

{

RefreshRates();

double pPoint = MarketInfo(Symbol(),MODE_POINT);

double step = MarketInfo(Symbol(),MODE_LOTSTEP);

double minLot = MarketInfo(Symbol()l,MODE_MINLOT);

double maxLot = MarketInfo(Symbol(),MODE_MAXLOT);

double lots = minLot;

if (risk>0 && stopLoss>0)

{

lots = AccountFreeMargin()*(risk/100.0)/(stopLoss*MarketInfo(s_symbol,MODE_TICKVALUE)/pPoint);

}

}

return(MathMax(MathMin(lots,maxLot),minLot));

}

追記:stopLossはすでにpips/pointsで関数に渡されている必要があります(整数値ではありません)

ありがとう、Mladen。

でも、買い注文のコードを複合化するのに失敗しました。

多くのエラーと警告が表示されます。

どのようにそれを複合化するのですか?

ありがとうございます。

extern double lots = 0.1;extern double stopsize = 20;

extern double profsize = 10;

int err;

int ticket;

double stop;

double prof;

int start()

{

int TotalOrders = 0;

for (int i=0; i <= OrdersTotal(); i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0, NULL,LimeGreen);

stop=(Ask-stopsize*Point);

prof=(Ask+profsize*Point);

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

err=GetLastError();

// Comment("This is a test ", err, " ", stop, " ", prof);

Comment(" ");

}
 
hock87:
ありがとうございます、Mladen。

しかし、私は買い注文のコードにコードを合成するために失敗しました。

多くのエラーと警告が表示されます。

どのようにそれを配合する?

ありがとうございます。

extern double lots = 0.1;extern double stopsize = 20;

extern double profsize = 10;

int err;

int ticket;

double stop;

double prof;

int start()

{

int TotalOrders = 0;

for (int i=0; i <= OrdersTotal(); i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0, NULL,LimeGreen);

stop=(Ask-stopsize*Point);

prof=(Ask+profsize*Point);

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

err=GetLastError();

// Comment("This is a test ", err, " ", stop, " ", prof);

Comment(" ");

}

このように試してみてください(私は今それをテストし、それが動作します)。

extern double lots = 0.1;extern double stopsize = 20;

extern double profsize = 10;

int err;

int ticket;

double stop;

double prof;

int init() { return(0); }

int deinit() { return(0); }

int start()

{

int TotalOrders = 0;

for (int i=0; i <= OrdersTotal(); i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0, NULL,LimeGreen);

stop=(Ask-stopsize*Point*MathPow(10,Digits%2));

prof=(Ask+profsize*Point*MathPow(10,Digits%2));

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

err=GetLastError();

// Comment("This is a test ", err, " ", stop, " ", prof);

Comment(" ");

}
ファイル:
_test_1.mq4  1 kb
test_1.gif  78 kb
 

親愛なるMLADENとMr.tools pls,

3つまたは4つの指標のシグナルがあらかじめ定義された条件を満たすような、特定の条件に基づいてシグナルを与えるEAを作成することは可能ですか?

買いシグナルを出すEAを作りたい。

ema 8 cross ema 21

0以上のqqe

非遅延MAは緑である

キャンドルが雲の上に ある。

EAは取引を開始せず、指定された条件が満たされたときにシグナルを出すだけで良い。

 

ムラデンさん、ありがとうございます。

私はそれを試してみました。

しかし、それはまだ$ 0.1でロットを開きます。

私はたい私の口座残高 の割合でロットサイズを開く

例:口座残高が500ドルある。

5%のロットサイズを開くと、0.25ドルのロット、TP=10 SL=20をオートカウントして開く。

LotSizeSlot1 = AccountBalance() * (RiskSlot1 / 100)

LotSizeSlot1 = $500*(5%/100)

LotSizeSlot1 = $ 0.25

それからそれは自動で$0.25ロットとTP=10 SL=20を開く。

どのようにそれを作成するには?

ありがとうございます。

 
hock87:
ありがとうございます、Mladen。

私はそれを試してみました。

しかし、それはまだ$ 0.1でロットを開きます。

私は私の口座残高の割合でロットサイズを開きたい

例:口座残高が500ドルある。

5%のロットサイズを開くと、自動的に0.25ドルのロット、TP=10 SL=20がカウントされ、開かれます。

LotSizeSlot1 = AccountBalance() * (RiskSlot1 / 100)

LotSizeSlot1 = $500*(5%/100)

LotSizeSlot1 = $ 0.25

それからそれは自動で$0.25ロットとTP=10 SL=20を開く。

どのようにそれを作成するには?

ありがとうございます。

添付されたもののように

ファイル:
_test_2.mq4  2 kb