KimIVの便利な機能 - ページ 75

 

こんにちは、親愛なるイゴール! 私のシステムはトレンドサプレッサーを使用しています。そして、その中では、クロスオーバーの時間も価格も重要です。
小節の連続は、必ずしも「連続した」時間を持つとは限らない。出口、穴など
CrossPointOfLines ( in test_CrossPointOfLines.mq4) を使って、自然な形で時間を計算すると、次のような結果が得られます。

ゼロバーの左側

(チャート上のトレンドラインの位置はシステムとは関係なく、ランダムに選択されます。トレンドラインの基準点には

ゼロバーの左側に1つ、右側にもう1つ)。


と右側

計算は時間単位ではなく、状況に応じて、棒グラフと時間単位で行う必要があります。左の時間の単位はbarです。 そして、右側については、ゼロバーの後、時間単位で計測する必要があります。

既成のソリューションを探してみても、まだ何も出てきません。 CrossPointOfLines 関数は、今のところこのサイトにしかありません。完璧な歴史が必要なのです :(

 

イゴールさん、ごきげんよう。

アドバイスや解決策など、よろしくお願いします。前のバーが前のバーを「吸収」したときにExpert Advisorがシグナルを出すようにしようとしているのです。

1 - 吸収が上向きに起こった場合
2 - 吸収が下向きに起こった場合
.

値と終値を比較して出来上がり・・・と、とてもシンプルに考えていましたが、そうではありません。前の2本のバーにマウスを合わせると、明らかに最後の1本がペナントを食べています。

非常に多くのヘルプを希望し、事前にありがとうございました。


以下、本文です。

int start()
{
//----
if (SShort()==1)
Alert("1");
}.
if (SLong()==1)
Alert("2");
}.
//----
return(0);
}.
//+------------------------------------------------------------------------+
int SShort()
{int MS=0;
if (Open[1]>Close[2] && Close[1]<Open[2] && Open[1]>Close[1] && Open[2]<Close[2]).
MS=1;
return(MS);
}.
//+------------------------------------------------------------------------+
int SLong()
{
int ML=0;
if(Open[1]<Close[2] && Close[1]>Open[2] && Open[1]<Close[1] && Open[2]>Close[2]).
ML=1;
return(ML);
}.
//+------------------------------------------------------------------+
 

タイムフィルターセット:CPO

(などなど・・・)。

と聞かれたら、自分で考えた結果がこちらです。


1.日常的な活動を禁止または許可する。


オプション1.

// Закрыть все позиции в конце дня в указанное время
if (Hour()==23 && Minute()>=45) 
{ ЗакрытьДень();}


// Запретить эксперту торговать С и ПО
if ( (Hour()==22 && Minute()>=00) && (Hour()==23 && Minute()>=59) ) return;

なお、これらのオプションにおける「有効期限」は、分数の1時間59秒の終わりまでとする。

つまり、23:59と表示されているイベントの終了時刻は、実際には23:59:59です。

また、分単位では比較演算子「>=」を使用するため、「==」を指定しても問題なく、時間単位で終了します。

が、時間を59秒にワイプしても、いずれにせよ効果はあるのだが......。


オプション2.

条件設定の観点から、より正確に・・・。

// Выборка ОТ и ДО
if( OtTime(2,15,21) < OrderCloseTime() && OrderCloseTime() < DoTime(4,58,33) )
{ Действия;}

// Функции преобразования 
datetime OtTime(int h=0, int m=0, int s=0) {datetime ot;
ot=( h*3600)+( m*60)+ s+StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));
return ( ot);}
//--------------
datetime DoTime(int h=0, int m=0, int s=0) { datetime dt;
//if(h>23||h<0) Alert("Должно быть от 0 до 23"); h=0; 
//if(m>59||m<0) Alert("Должно быть от 0 до 59"); m=0;
dt=( h*3600)+( m*60)+ s+StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));
return ( dt);}

時刻の設定は、関数にパラメータを渡す際に、例えば 21:15:23 のように (21,15,23) と指定することで行います。

カッコ悪いのは明らかですが、かなり実用的なコードです...。

SZY:入力されたパラメータの有効性チェックが偶然に行われることはない。

間違って入力すると、とんでもないことになるからです。他に方法が見つからなかったので、コメントアウトしています。

したがって、この問題を解決する方法を教えていただけるとありがたい のですが...。


バリアント3号。

結果的には、それが最もシンプルで正確な方法なのです。

// Внешние параметры, могут быть экстернами
string ВН="02:15"; // начало события
string ВК="04:58"; // конец события

int start()
{
int m;
datetime vn=StrToTime( ВН);
datetime vk=StrToTime( ВК);
// либо напрямую указывать время по типу:
//  datetime vn=StrToTime("02:15");
//  datetime vk=StrToTime("04:58");

for (int m=0; m < OrdersHistoryTotal() ; m++) 
{
OrderSelect( m, SELECT_BY_POS, MODE_HISTORY);
if( (OrderCloseTime()> vn) && (OrderCloseTime()< vk) )
{ Действия;}
}

return()
}

単純化については、関数StrToTime()で渡されるパラメータの変換の特殊性にあるようです。

例えば、時刻「HH:MM:SS」だけを入力すると、現在の各日の時刻が出力される...という具合です。


ところで...

// можно написать и так:
if( (OrderCloseTime()>StrToTime( ВН)) && (OrderCloseTime()<StrToTime( ВК)) )
// или даже так:
if( (OrderCloseTime()>StrToTime("02:15")) && (OrderCloseTime()<StrToTime("04:58")) )

時間別サンプリングと日別サンプリングを組み合わせることで、種類別にフィルタリングすることができます。

- 各日18:00の時点、あるいはCから上の指定期間の毎日がどうであったか 時間:分:秒

しかし、日数の範囲も、どこから どこまでが 詰め込みなのか...。


2.関数 DateFirstDayMonday()

(DateOfMonday()に基づく)

datetime DateFirstDayMonday() 
{ 
datetime dfdm;
dfdm=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE))-((Day()-1)*86400);
return ( dfdm);
}

Date of the first day as 00:00:00 as current month を返します。

月初以前のイベントをフィルタリングする必要があります。

// выборка закрытых ордеров с начала месяца:
if( DateFirstDayMonday() < OrderCloseTime() )
{ Действия;}

// выборка ДО начала месяца (с начала истории счёта):
if( DateFirstDayMonday()-1 > OrderCloseTime() )
{ Действия;}

2番目のサンプルのDateFirstDayMonday()-1は、「前月の最終日23:59:59」と表示されます。


...

ダミーなので、事前に蹴らないでくださいね。

:)))

 
イゴールさん、このインディケータにアラートを 付けるのを手伝ってください。
ファイル:
 
kombat >> :

私はダミーなので、あらかじめ蹴らないでください。:)))

カイネグならぬカイネグ、藪をつついても最後まで追いかけろ。このタイプのブール関数には、許可された操作時間と終了時間を別々に移動させたいと考えています。

bool TradeTime(取引開始時刻, 取引終了時刻)

そうすると、if (TradeTime(.,...))を使って作業するのがとても便利になりますよ。

 
granit77 >> :

チネグはチネグでも、舵を取ったのならフォローを。操作可能時間、終了時間を別のブール関数にすることをお願いします。

bool TradeTime(取引開始時刻, 取引終了時刻)

その時、if (TradeTime(.,.))を使って作業すると非常に便利でしょう!



まあ、もう...。;)

1つのバンクに対して、2つのタイミングを同時に取るバリアントを作っています。

- 22:00のロールオーバー前にすべての注文とポジションをクローズします。

- 22:00のロールオーバー開始時から23:59の終了時までの取引休止時間

(追加チェックなしの生バージョン)

//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH>
//HHHHH Стартуем... HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH>
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH>
int start() {
//--- Общая проверка --------------------------------------------------------+
if(! IsCondition()) {Print("Низззяяя..."); return;}
//--- Задание неторгового времени (паузы) -----------------------------------+
ObjectDelete("НЕТОРГВРЕМЯ");
if((TimeCurrent()>StrToTime("22:00"))&&(TimeCurrent()<StrToTime("23:59:59"))) 
{ NoTradeTime(); return;}
//--- Принудительное закрытие всех ордеров и позиций в конце дня ------------+
if(Hour()==21 && Minute()>=45) { ЗакрытьДень(); return;}
//*метод имеет недостаток: он будет закрывать до конца указаного часа...
//*например время 21:45, закрывать будет до 21:59:59 а с 22:00 прекратит.
//*впринципе это нам не повредит...
//--- Конец условий ---------------------------------------------------------+
// бла-бла-бла...
return(0);
}
 
kombat >> :

...(追加チェックなしの生バージョン)

Vininは、タイミングを取るための機能が別にあり、非常に細かく設定されていました。彼のサイトのEAを見るか、彼のドアをノックしてください。

 
granit77 >> :

VininのEAでは、時間を扱うための機能が別に用意されており、非常に細かく徹底されています。彼のサイトのExpert Advisorsを見るか、彼のドアをノックしてください。

ありがとうございます。でも、まだ必要ないですね...。

ただ、今はこのアドバイザーのために時間を割くことができないんです。

そこに何を書けばいいのか、どう書けばいいのかもわかっているのですが...。

*

このトピックを散らかさないために、銀行の掲示板に本文を掲載します。

もちろん、彼の時代にも。;)

 
granit77 >> :

bool TradeTime(取引開始時刻, 取引終了時刻)

そうすると、if (TradeTime(.,.))を使って作業するのが非常に便利です

イゴール・キムにこのような機能を注文する必要があるのです。

 
goldtrader писал(а)>>

イゴール・キムは、このような機能を注文するべきだ。

リクエストに参加します!とても便利で必要な機能でしょう。現在の取引の実態に照らし合わせると...。

そこに2つのTIME間隔を設けることも可能です。