bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {// Объявление функции. Передаваемые параметры: sy = символ, op - тип, mn - магикdatetime t; // Переменная содержит время закрытия ордераdouble ocp, osl; // ocp - цена закрытия позиции, osl - цена СтопЛосс закрытой позицииint dg, i, j=-1, k=OrdersHistoryTotal(); // k содержит общее количество ордеров в историиif (sy=="0") sy=Symbol(); // Если в ф-цию передан sy равный 0 или NULL, то использовать символ графика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) { // ... если тип ордера равен или -1 (имеется ввиду любой) или равен переданному в ф-цию, ...if (mn<0 || OrderMagicNumber()==mn) { // ... если его магик или любой (-1) или равен переданному в ф-цию (магику советника), ...if (t<OrderCloseTime()) { // ... если переменная t содержит время закрытия меньше, чем время закрытия выбранного ордера, то ...
t=OrderCloseTime(); // ... то присвоим переменной t время закрытия выбранного ордера (этот ордер закрыт позже предыдущего)
j=i; // Запишем в переменную j индекс найденного ордера с максимальным временем закрытия
}
}
}
}
}
}
} // По окончании цикла в переменной j находится индекс последнего закрытого ордераif (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) { // Выберем его по индексу
dg=MarketInfo(sy, MODE_DIGITS); // Количество цифр после десятичного точки в цене инструмента, заданного переменной syif (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2; // Честно... точно не скажу, но вижу, что корректировка под йену
ocp=NormalizeDouble(OrderClosePrice(), dg); // Нормализуем цену закрытия ордера для дальнейшего сравнения с ценой СтопЛосс
osl=NormalizeDouble(OrderStopLoss(), dg); // Нормализуем цену СтопЛосс ордера для сравнения с ценой закрытияif (ocp==osl) return(True); // Если эти цены равны, значит поза закрыта по стопу, возвращаем значение "Истина"
}
return(False); // Возвращаем "Ложь"
}
こんにちは、この質問に興味があります。アルパリでは、アドバイザーをアップロードするサーバーを用意して、24時間 体制で作業できるようにしているのでしょうか?直接お返事いただけますか?
うまくいきませんね、ここを変えるか、開始の後に入れるかしないといけないのかもしれませんね。
紙に書かれたあなたのコードを、私が理解できるロシア語に翻訳しようとしましたが、うまくいきません。
特に各条件が続く場合、8つの条件のうち1つの条件が続くと複雑すぎる。
もちろん、このコードを作った人が奇跡であることに異論はありませんが、私にとっては完全な倒錯です(良い意味で)。
標準機能以外の各操作や条件には、コメントをつけるのが面倒です。
コードに冗長な部分がありますが、かなり読みやすいコードになっています
このコードではなく、何かがうまくいっていないのでは...?:)
それだけの理屈で...。Viktorの言う通り、冗長ですが、できるだけシンプルに......。:)
が、プログラム内の期間を変更することについての質問 ...例えば、異なる時代に適用されるべき特定のオペレータの順序があります...私はそれをタイムラインの形で行うことが容易であると理解しています...を期間変更することで、...ドキュメントにピリオド値を返す関数があるのですが、それを変更する関数が見当たりません。何が間違っているのでしょうか?
グラフの周期は、以下の値のいずれかを指定します。
ありがとうございました。ある期間に作業するオペレータのグループは、この表に示されているように、彼らの前にある期間の一つを指定するだけで十分なのでしょうか?
正しい答えを出すには、少なくとも、具体的に期間を設定する必要があるサンプルコードを見る必要があります...
string trend() {int count,count_change; double bar_centr; string trend; bool clear; for (int i=10;i!=0;i--) { bar_centr = (High[i]-Low[i])/2+Low[i]); if (bar_centr>((High[i+1]-Low[i+1])/2+Low[i+1]) count++; if (bar_centr<((High[i+1]-Low[i+1])/2+Low[i+1]) count--; } Print (count, "period " );
,Period()); if (count>3) trend="buy"; if (count<-3) trend="sell"; if (count<3||count>-3) trend="uncertain"; return(trend);}.
この機能は、異なる期間に一貫して適用される必要があります ...ターミナルで時間軸を変えてWindowsに接続すると動作するのですが・・・。問題は、EAが複数の異なる期間を処理することが可能かどうかということです ...
この関数は、異なる期間に連続して適用する必要があります ...ターミナルでEAとWindowsを異なる周期で接続すると動作するのですが・・・。問題は、EAが複数の異なる期間を処理することが可能かどうかということです ...
この関数は、現在のチャートとピリオドだけでなく、渡された任意のピリオドでも動作するようにしたいとのことですが ...
では、次のように関数を呼び出してください。
trend(Symbol(), Period()); // EAがホバリングしているチャートと期間の値が返されます...
trend(USDJPY, PERIOD_D1); //USDJPYのシンボルと 期間 "1日 "の値を返します。
PERIOD_D1 の代わりに 1440 と入力しても、同じ結果になります...
パラメータなしで呼ばれた場合、この関数は現在のシンボルとピリオドの値を返します(これらはデフォルトで設定されています)。
現在のグラフと期間だけでなく、渡されたどのグラフでも関数が動作するようにしたいとのことですが...。
では、このように関数を呼び出してください。
trend(Symbol(), Period()); // EAがホバリングしているチャートと期間の値が返されます...
trend(USDJPY, PERIOD_D1); // USDJPYのシンボルと期間 "1日 "の値を返します。
PERIOD_D1 の代わりに 1440 と入力しても同じです...。
包括的な答え...どうもありがとうございました