//---начало блока глобальных переменных---------------int GLOBAL_DATA_LIMIT;
bool first_run=true;
//---конец блока глобальных переменных//++++++++++++++++++++++++++++++++++++//---начало блока инициализацииvoidOnInit()
{
GLOBAL_DATA_LIMIT= расчет числа данных(длины окна данных), необходимых для расчета окна условного индикатора заданной длины
....инициализация
}
//---конец блока инициализации индикатора//+++++++++++++++++++++++++++++++++++++++//---начало блока обновления индикатора--intOnCalculate (
constint rates_total, // current size of the timeseries arrayconstint prev_calculated, // size of the timeseries array got by reurn value the last timeconstdatetime& time[], // Timeconstdouble& open[], // Openconstdouble& high[], // Highconstdouble& low[], // Lowconstdouble& close[], // Closeconstlong& tick_volume[], // Tick Volumeconstlong& volume[], // Real Volumeconstint& spread[] // Spread
)
{
if(rates_total<0)
{
printf("На графике отсутствуют исторические данные");
return(0);
}
if(rates_total<GLOBAL_DATA_LIMIT)
{
printf("Недостаточно исторических данных, необходимое количество: "+string(GLOBAL_DATA_LIMIT));
return(0);
}
if(prev_calculated==0) // срабатывает при первом запуске, или когда история поменялась
{
if (first_run==true) первый расчет при запуске - в момент первого тика после инициализации
*{
ArrayCopy(cur_price_array, close, 0, (rates_total-1)-GLOBAL_DATA_LIMIT, GLOBAL_DATA_LIMIT); - копируем в массив необходимое количество значений цены
...
Со скопированным массивом проводим расчет
Отображаем результат
...
first_run=false;
*}
else расчет на каждом тике
{
в это место вставить код *(без first_run=false;), если считать на каждом тике. Если считать не на каждом тике, а по новому бару, то вставить * в функцию isNewBar
}
}
if(isNewBar(_Period)) расчет на каждом баре
{
*{
ArrayCopy(cur_price_array, close, 0, (rates_total-1)-GLOBAL_DATA_LIMIT, GLOBAL_DATA_LIMIT); - копируем в массив необходимое количество значений цены
...
Со скопированным массивом проводим расчет
Отображаем результат
...
*}
}
return(rates_total);
}
//---конец блока обновления индикатора---
条件付き指標の値は、その時々のチャート上のすべてのローソク足に対して必要なのか、それとも最近のローソク足のうちの一定数に対して必要なのか、明確にするための質問です。
以下は、私が作成したコードの一部です。閉じるときに問題が発生したことはない(少しいじりました)
int i, total = OrdersTotal(), slippage = 50;
bool Ans;
for (i = total-1; i >=0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol()){
if(OrderType()==OP_BUY)です。{
Print("CLOSE BUY");
Ans = false;
while(Ans==false) {
Ans = OrderClose(OrderTicket(),OrderLots(),Bid, slippage, DodgerBlue);
Sleep(1000);
RefreshRates();
}.
}
if(OrderType() == OP_SELL) {
Print("CLOSE SALE");
Ans = false;
while(Ans==false) {
Ans = OrderClose(OrderTicket(),OrderLots(),Ask, slippage, Orange);
Sleep(1000);
RefreshRates();
} ...
}
}
}
以下は、私が作成したコードの一部です。閉じるときに問題が発生したことはない(少しいじりました)
...
本当にありがとうございました!!!試してみます。
後者については、何らかのウィンドウで設定されていることが望ましい。
私はこのように実装しています。
各バーまたはティックにコピーされたm(GLOBAL_DATA_LIMIT)の価格値に基づいて、1つまたは複数のn個の指標値を計算する方式です。
計算値ウィンドウの過去の値が変化しない場合、計算(内側)では、以下のように進めることができます。
-新しい値(1つ)だけを計算します。
-計算値ウィンドウ(結果を含む配列)をインデックス1つ分左にシフトします。
-結果配列の 最後のインデックスに 新しい値を書き込む。
クリアしているかどうかはわかりません。コードはMQL5で、4は知りませんが、似たようなものでしょう。
...
アドミン、絶対的な権力は独裁につながる。政治的に正しいティンボも、このマラスムスに耐え切れず、どこかに行ってしまいました :)
少なくとも時には、すべてをその場に収める反対派がいるはずだが、ここでは、誰が本気で数学のセクションを定義しているのか不明であり、一方で、小学生の力を借りなければ秩序を閉じることができない。明日はどうなるんだろう?
あなたは再び禁止されるために提示されます。
スレッドをありがとうございました。必要なものがあればお申し付けください。
スレッドを存続させるために:)
月曜日のモスクワ時間午前11時15分に、何の分析もせずに、MT5で観測したペアをオープンしました(慣れるべきですね)。
EURUSDとGBPUSDは横ばいを示していたので、開かなかった。 金曜日まで我慢して、ちゃんと毎日見て、場合によっては修正した方がいいですけどね。
もし興味がある人がいたら、見てみてください。
ログイン:729566