bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
datetime t;
double ocp, otp;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) { // !!!!!!!!?????? ХОТЬ КТО-ТО МОЖЕТ ОБЪЯСНИТЬ ЗНАЧЕНИЕ СТРОК КОДА, КОТОРЫЕ НАЧИНАЮТСЯ С ЭТОГО МЕСТА?
dg=MarketInfo(sy, MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
otp=NormalizeDouble(OrderTakeProfit(), dg);
if (ocp==otp) return(True);
}
return(False);
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
datetime t;
double ocp, otp;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
// !!!!!!!!?????? ХОТЬ КТО-ТО МОЖЕТ ОБЪЯСНИТЬ ЗНАЧЕНИЕ СТРОК КОДА, КОТОРЫЕ НАЧИНАЮТСЯ С ЭТОГО МЕСТА?if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {// Если очередной ордер истории торгов выбран, то
dg=MarketInfo(sy, MODE_DIGITS);// переменная dg принимет значение дигитса по валютной паре, имя которой лежит в переменной sy// далее я возможно не верно расставил приоритет скобок, но по сути должно быть так:if (dg==0){// если дигитс равен нулю, тоif(StringFind(OrderSymbol(),"JPY")<0){// если в имени инструмента ордера найдена подстрока то (только это не правильно написано - функция может верноуть значение > 1)
dg=4;// дигитс принимает значение = 4
}
else{// иначе
dg=2;// дигитс принимает значение = 2
}
}
ocp=NormalizeDouble(OrderClosePrice(), dg);// нормализация цены закрытия ордера
otp=NormalizeDouble(OrderTakeProfit(), dg);// нормализация цены ТейкПрофита ордераif (ocp==otp) return(True);
}
return(False);// команда вернуть из подпрограммы значение "ложь"
}
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {.
datetime t;
double ocp, otp;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {.
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){
if (OrderSymbol()==sy || sy=="){
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {。
if (op<0 || OrderType()==op) { }.
if (mn<0 || OrderMagicNumber()==mn) {.
if (t<OrderCloseTime()){
t=OrderCloseTime()。
j=iとする。
}
}
}
}
}
}
}
// !!!!!!!!??????この場所から始まるコードの行の意味を誰か説明してください。
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)){/// 取引履歴の次の順番が選択された場合
dg=MarketInfo(sy, MODE_DIGITS);//変数dgは変数syに名前がある通貨ペアで桁の値を受け入れる。
// 以下、おそらく括弧の付け方が間違っているのでしょうが、実際には以下のようになるはずです。
if (dg==0){// if digits is zero, then
if(StringFind(OrderSymbol(), "JPY")<0){// もしオーダーシンボル名に部分文字列が見つかったら(正しく書かれていないだけで、この関数は> 1を検証することができます)。
dg=4;// 数値は4となる
}
else{// else
dg=2;// 数値が2であること
}
}
ocp=NormalizeDouble(OrderClosePrice(), dg);//注文の終値を正規化する。
otp=NormalizeDouble(OrderTakeProfit(), dg);// 注文のTakeProfit価格を正規化する。
if (ocp==otp) return(True);
}
return(False);// サブルーチンから return(false) を実行するコマンド
}
ありがとうございます、digitとは?
取引商品の桁数 - 小数点以下が何桁であるか。
取引商品の意義 - 小数点以下の桁数が何桁か。
つまり、桁が4と分かれば、コードはこう短縮できるのですね。
int dg = 4;
コード..........................
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)){
ocp=NormalizeDouble(OrderClosePrice(), dg);// 注文終値の 正規化otp=NormalizeDouble(OrderTakeProfit(), dg);// 注文TakeProfit価格の正規化
if (ocp==otp) return(True);
}
return(False)です。
}
取引に関わる全てのペアの未決済注文の合計数を計算するインジケータがあれば教えてください。
CodeBaseのボスに質問です。私はそこに3つの出版物を送りました(プラス3つの英語版)。そのうちのひとつは7月18日に送信されたもので、未掲載です。当初は、そこにコードを送ると3〜4日で出てきました。現在、新しいものが出版されるかどうかは不明である。例えば、資料が弱く、上司の意見でCodeBaseに突っ込んではいけないとなった場合、表示されないというメッセージが出て、例えば、アプリケーションから削除されるのか知りたいのです。もし、掲載されないとわかっていたら、もっと別の方法で、もっと広範囲に掲載の準備をしたでしょう。出版までの平均的な待ち時間はありますか?