初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 852

 

トレードを開始しない、どこが悪い?

iRSI_handle=iRSI(NULL,0,15,PRICE_OPEN);

double iRSI_buf[];

ArraySetAsSeries(iRSI_buf,true);

CopyBuffer(iRSI_handle,0,0,20,iRSI_buf);

if (iRSI_buf[0]>60)

trader.Buy(Lot);
 
Askr:

トレードが開かない、バグはどこだ?

バグ番号1:各ティックで 新しいインジケータHANDLを作成します。

ショール番号2:(おそらく)Lot変数のボリュームが正しくない。

欠陥番号3:(おそらく)CTradeクラスの注文充填型が充填されていない。


一般的に、端末(またはテスター)のログには何が書かれているのでしょうか?

 
Kirill Belousov:

1SLからの為替差損を乗じた額

また、例えばBOで損失が1になった場合。

計算式に値を入れても、同じ結果にはならない。

どうしたんですか?

double lot=1.0;
double koef_lot=2.0;
int seriya =15;
double depo=0.0;
depo=(lot*(koef_lot*seriya-1))/(koef_lot-1);
   Comment(" depo ",depo);
 
Vladimir Karputov:

ギャップ番号1:各ティックで NEWインジケータHANDLを作成します。

ショール番号2:(おそらく)Lot変数のボリュームが正しくない。

欠陥番号3:(おそらく)CTradeクラスの注文充填型が充填されていない。


とにかく、端末(またはテスター)のログは?

このコードイエスはオニチックスにあった

ArraySetAsSeries(iRSI_buf,true);

CopyBuffer(iRSI_handle,0,0,20,iRSI_buf);

onyticsに移動させました。ここの記事を読んで、仕事には差はないが、オニチケでは良いということが理解できました。しかし、自分自身のわかりやすさという点では、1ブロックで全てを行う方が都合が良かったので、自分で設定した問題を解決しながら、純粋に自分のために(学習しています。)

問題はロットで、ロットという変数ではなく、returnlotという関数(ロットを計算するための関数なので)を入れなければならなかったのです。

今、私はロット機能で間違いを見つけました。ロットは小数点以下の桁数が多く計算され、その結果、注文を開くことができません。不要な文字を減らして、2文字だけにする必要があります。

//параметры
input double      StartLot=0.1;
input double      StartEquityLot=10000;

//переменные
double KoefLotEQUITY;//разница эквити
double Lot;

//функция расчета текущего торгового лота
double LotF(double Lot)
{
KoefLotEQUITY=AccountInfoDouble(ACCOUNT_EQUITY)/ StartEquityLot;
Lot=StartLot*KoefLotEQUITY;
//функция минимального возможного лота
if (Lot<0.01)
{
Lot=0.01;
}

return(Lot);
} 

NormalizeDoubleとDoubleToStrこれまでのところ動作することはできません - 関数は、関数内に配置することはできませんと書き込み、私は関数の書き込みエラーで自分の仕事を置くときに下 - 私は修正することはできません。


 
Askr:

このコードはオニチクにありました。

オンティックに移動させた。ここの記事を読んで、仕事には差はないが、オンティケの方が良いということが理解できました。しかし、自分自身のわかりやすさという点では、1ブロックで全てを行う方が都合が良かったので、自分で設定した問題を解決しながら、純粋に自分のために(学習しています。)

問題はロットで、ロットという変数ではなく、returnlotという関数(ロットを計算するための関数なので)を入れなければならなかったのです。

今、私はロット機能で間違いを見つけました。ロットは小数点以下の桁数が多く計算され、その結果、注文を開くことができません。不要な文字を減らして、2文字だけにする必要があります。

関数NormalizeDoubleとDoubleToStrを貼り付けると、まだできない、関数が入れられないと言われ、下に、修正できないエラーが表示されます。


MQL5では、OnInitで一度だけ、インジケータハンドルを作成する必要があります。それは公理である。OnTickで各ティックにインジケーターハンドルを作成することはできません。

ロットの正しい正規化は、トレードクラスCsymbolInfo::NormalizePriceに あります。

 
Vladimir Karputov:

MQL5では、インジケータ・ハンドルは一度だけ、OnInitで作成する必要があります。それは公理である。OnTickで各ティックにインジケーターハンドルを作成することはできません。

ロットの正しい正規化は、トレードクラスCsymbolInfo::NormalizePriceに あります。

間違っている、反論はしない。しかし!!!すべてのティックに作成すると何が変わるのか?価値さえも変わることはない。

 
Alexey Viktorov:

間違っている、反論はない。しかし!!!ティックごとに作成すると何が変わるんだ?価値さえも変わることはない。

何が言いたいの?ただ、脚本に余計な手間がかかるだけだ。

 
Alexey Viktorov:

間違っている、反論はない。しかし!!!ティックごとに作成すると何が変わるんだ?価値さえも変わることはない。

最近の記事で、MQL5がMQL4スタイルのコーディングの名残である、ティック毎にハンドルを作成することに効果的に対処していることを示しました:メモリが無駄になることはありませんが、少なくとも操作速度は低下しています。しかし、繰り返しになりますが、MQL5でMQL4風にインジケータを作成 するのは正しい方法とは言えません。MQL5に乗り換えるということは、プログラミングスタイルを再構築しなければならないということです。

 
Konstantin Nikitin:

何が言いたいの?脚本に余計な仕事が増えただけだ。

もちろん、意味はありません。それはそのような隠された質問drubashkeた:なぜそれがあるとして、ここで十分である神経症に似ており、Capsロックを含む?

 

つまり、結果は同じだが、当然ながら実行は無意味であり、ずっと忙しいということが、書かれている内容から理解できる。

記事で書こうと思ってくれればよかったのですが、一般的には、同じことを何度もやる理由がないことは明らかです。

しかし、私は最適化するためではなく、理解し働くために書くという目標がありました。
理由: