MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 884

 

こんにちは、皆さん。))素人考えで申し訳ないのですが・・・。

OrderCloseの動作がよくわからない :(

つまり、新しい注文を出す前に、前の注文を終了させたいのです。

なぜこうもうまくいかないのか。


OrderClose(nom, 0.01, Bid,5, Red)です。

OrderSend(Symbol(), OP_SELL, 0.01 ,NormalizeDouble(Bid,5), 3 , NormalizeDouble(Ask+0.0005,5), NormalizeDouble(Bid-0.0008,5), "", nom,0,Red) です。


ログは基本的に無効なチケットについて悪態をついています。

をNomの代わりにOrderCloseに入れると、何を入れればいいのでしょうか? それとも、全く間違った方向で考えているのでしょうか?)

 
Sergey Voytsekhovsky:

minStopLoss = 現在値 +/- (MaxValue(2*Spread, StopLoss)) を試してみてください。

試してみました。2つのスプレッドは24、そのように動作しません、終値から19で動作を開始します。現在の始値から、3つのスプレッドで動作します。
ループでストップを1ポイント増やし、注文を出した。19日にオープンした。問題は、それをどう設定するかではありません。問題は、正しい計算方法です。価格はありません。ストップボタンでストップを設定すると、手動で注文を開始する際に表示されます。ばかばかしい、この掲示板を大量に読み込んでいる。7ページ目(メッセージ#65)にいくつかの機能を発見しました。確認したらお知らせします。

 
Sergey Voytsekhovsky:

私はそれを勉強したが、何も新しい、どうやらそれは(私にとって新しい)もちろん、すべてのイニシエーションに明白である、自明である。上記のインデックス作成時のバッファの相互配置の機能以外、目新しいものは見つかりませんでした。このシークエンスに敬意を表して、さらにチープな写真を撮りました。

下記写真、添付ファイル

あなたはとても運が悪いのかもしれませんが、私は他人のコードを詮索するのは好きではありません。直すとなるとなおさら...。

次の質問ですが、指標値がちょうど50になるのはどれくらいの確率でしょうか?

         ColorHistogram_2Buffer1[i]=50; 

私が理解したところでは、ある色が>50で別の色が<50であるべきですが、==50は見たことがありません。もちろん、==50の場合の損失をなくすためには、宗教が許す限り、比較の一方に>=50、もう一方に<=50を加えなければならない。見栄えが良くなるかもしれません。

そして2つ目の質問ですが、バッファのインデックスをすべて変更するのに何回必要だったと思いますか?再インデックス化した後、コード内のすべてを正確に修正しましたか?カラーバッファのインデックスを4にして、それに合わせて補助バッファ 5、6を作ると楽かもしれませんね。編集の手間も省け、さらにミスをする可能性も低くなります。

 
klok79:
試してみました。2つのスプレッドは24、そのように動作しません、終値から19で動作を開始します。現在の建値から、3つのスプレッドで動作します。
ループでストップを1ポイント増やし、注文を開きました。19でオープンしました。選び方が問題なのではありません。問題は、それをどう正しく計算するかだ。ボタンでストップを設定しても、手動で注文を開くと表示される価格がないのです。ばかばかしい、この掲示板を大量に読み込んでいる。7ページ目(メッセージ#65)にいくつかの機能を発見しました。確認して報告する必要がありますね。

確認しました。作品紹介
minStopLoss = Current Price +/- (max value(2*Spread, StopLoss)) と書かれていますが、Current Price の部分だけが、注文のオープン価格ではなく、ミラー価格であると理解しています。
なぜ、見開き2ページが適しているのでしょうか?
さらに2つの疑問が生まれます。
1.Digits()とPoint();の値を取得するのに、なぜSymbolInfoIntegerが使われるのですか?
2.SymbolInfoInteger関数を呼び出す前に、エントリ(int)を使用するのはなぜですか?私の理解では、これは強制型変換です。

 
klok79:

確認しました。効果あり
これはすべておかしい、彼らはまだ同じminStopLoss = Current Price +/- (MaxValue(2*Spread, StopLeval)) を書いているが、Current Priceは注文の開始価格ではなく、ミラー価格である。
なぜ、見開き2ページが適しているのでしょうか?
さらに2つの疑問が生まれます。
1.Digits()とPoint();の値を取得するのに、なぜSymbolInfoIntegerが使われるのですか?
2.SymbolInfoInteger関数を呼び出す前に、エントリ(int)を使用するのはなぜですか?私の理解では、これは強制型変換です。

Point() SymbolInfoInteger を取得するためには、どのような方法でも動作しません)。

一般に、Point()や_Pointは現在のシンボルに対してのみ有効であることを覚えておく必要があります。EAが動作するキャラクター以外のキャラクターには、まさにこの機能を使う必要があります。

SymbolInfoInteger関数は、int値だけでなく、long、bool、列挙型も返します。

 

Sergey Voytsekhovskyさん、ありがとうございました。それと、もう一つ質問ですが、もし よろしければ、関数CharToStr
の逆関数(シンボルからそのコードを取得する)を提案して ください。BeisicやDelphiではそのための関数がありますが、C++では私の知る限り、2つの方法があるようなので、よろしくお願いします。
1 -mql4 にない Ascii_cod 関数
2.- 直接型変換を 行う。しかし、私のコードは、
string st="A "です。
Print ("文字コードA=",(int)st);

テキストを出力する キャラクタコード A=0

どうすればいいのか?

 
klok79:

セルゲイ・ヴォイチェホフスキーさん、お疲れ様でした。そして、もう一つ質問ですが、もし 差し支えなければ、CharToStr関数の逆関数
(シンボルからそのコードを取得する)、私が使ったBeisicとDelphiでは、そのための関数がありますが、C++では、私の理解では、二つのメソッドがありますから、提案してもらえませんか
1 -mql4 にない Ascii_cod 関数
2.- 直接型変換を 行う。しかし、私のコードは、
string st="A "です。
Print ("文字コードA=",(int)st);

テキストを出力する キャラクタコード A=0

どうすればいいのか?

StringToCharArrayは wikiの関数と異なり、1文字ずつ変換するのではなく、文字列をucar型の配列に変換して 、文字列内のすべての文字のコードを持つ ようにすることができます。

mql4にもそのような機能があります。

Документация по MQL5: Преобразование данных / StringToCharArray
Документация по MQL5: Преобразование данных / StringToCharArray
  • www.mql5.com
Посимвольно копирует преобразованную из unicode в ansi строку в указанное место массива типа uchar. Функция возвращает количество скопированных элементов. [in]  Количество элементов массива для копирования. Определяет длину результатной строки. По умолчанию -1, что означает копирование до конца массива, либо...
 
Alexey Viktorov:

Point() SymbolInfoInteger を取得するためには、どのような方法でも動作しません)。

一般に、Point()や_Pointは現在のシンボルに対してのみ有効であることを覚えておく必要があります。EAが動作するキャラクター以外では、この機能を使用する必要があります。

SymbolInfoInteger関数は、int値だけでなく、long、bool、列挙型も返します。

実は、Pointは2倍の値を持っています。つまり、SymbolInfoDoubleから 呼び出す必要があります。

 
Konstantin Nikitin:

さて、Pointの値は実際には2倍です。SymbolInfoDoubleで 要求することを意味します。

投稿番号65の MQL4用のこれらの関数についてです。

//+------------------------------------------------------------------+
double CorrectStopLoss(string symbol_name,int op,double price_set,double stop_loss) {
   if(stop_loss==0) return(0);
   double pt=SymbolInfoDouble(symbol_name,SYMBOL_POINT);
   double price=(op==OP_BUY)?SymbolInfoDouble(symbol_name,SYMBOL_BID):(op==OP_SELL)?SymbolInfoDouble(symbol_name,SYMBOL_ASK):price_set;
   int lv=StopLevel(symbol_name), dg=(int)SymbolInfoInteger(symbol_name,SYMBOL_DIGITS);
   if(op==OP_BUY || op==OP_BUYLIMIT || op==OP_BUYSTOP) return(NormalizeDouble(fmin(price-(lv+1)*pt,stop_loss),dg));
   else return(NormalizeDouble(fmax(price+(lv+1)*pt,stop_loss),dg));
}
//+------------------------------------------------------------------+
double CorrectStopLoss(string symbol_name,int op,double price_set,int stop_loss) {
   if(stop_loss==0) return(0);
   double pt=SymbolInfoDouble(symbol_name,SYMBOL_POINT);
   double price=(op==OP_BUY)?SymbolInfoDouble(symbol_name,SYMBOL_BID):(op==OP_SELL)?SymbolInfoDouble(symbol_name,SYMBOL_ASK):price_set;
   int lv=StopLevel(symbol_name), dg=(int)SymbolInfoInteger(symbol_name,SYMBOL_DIGITS);
   if(op==OP_BUY || op==OP_BUYLIMIT || op==OP_BUYSTOP) return(NormalizeDouble(fmin(price-(lv+1)*pt,price-stop_loss*pt),dg));
   else return(NormalizeDouble(fmax(price+(lv+1)*pt,price+stop_loss*pt),dg));
}
//+------------------------------------------------------------------+
double CorrectTakeProfit(string symbol_name,int op,double price_set,double take_profit) {
   if(take_profit==0) return(0);
   double pt=SymbolInfoDouble(symbol_name,SYMBOL_POINT);
   double price=(op==OP_BUY)?SymbolInfoDouble(symbol_name,SYMBOL_BID):(op==OP_SELL)?SymbolInfoDouble(symbol_name,SYMBOL_ASK):price_set;
   int lv=StopLevel(symbol_name), dg=(int)SymbolInfoInteger(symbol_name,SYMBOL_DIGITS);
   if(op==OP_BUY || op==OP_BUYLIMIT || op==OP_BUYSTOP) return(NormalizeDouble(fmax(price+(lv+1)*pt,take_profit),dg));
   else return(NormalizeDouble(fmin(price-(lv+1)*pt,take_profit),dg));
}
//+------------------------------------------------------------------+
double CorrectTakeProfit(string symbol_name,int op,double price_set,int take_profit) {
   if(take_profit==0) return(0);
   double pt=SymbolInfoDouble(symbol_name,SYMBOL_POINT);
   double price=(op==OP_BUY)?SymbolInfoDouble(symbol_name,SYMBOL_BID):(op==OP_SELL)?SymbolInfoDouble(symbol_name,SYMBOL_ASK):price_set;
   int lv=StopLevel(symbol_name), dg=(int)SymbolInfoInteger(symbol_name,SYMBOL_DIGITS);
   if(op==OP_BUY || op==OP_BUYLIMIT || op==OP_BUYSTOP) return(NormalizeDouble(fmax(price+(lv+1)*pt,price+take_profit*pt),dg));
   else return(NormalizeDouble(fmin(price-(lv+1)*pt,price-take_profit*pt),dg));
}
//+------------------------------------------------------------------+
int StopLevel(string symbol_name) {
   int sp=(int)SymbolInfoInteger(symbol_name,SYMBOL_SPREAD);
   int lv=(int)SymbolInfoInteger(symbol_name,SYMBOL_TRADE_STOPS_LEVEL);
   return((lv==0)?sp*2:lv);
   }
//+------------------------------------------------------------------+

SymbolInfoInteger()でPointを取得するところが見当たりませんでした。

 
Artyom Trishkin:

投稿番号65の MQL4関数についてです。

SymbolInfoInteger()でPointを取得するところが見当たりませんでした。

はい、同じです。すり抜けてきました。要は、何が何だかわかっているのか......。

理由: