//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.04.2012 |//| Описание : Закрытие позиций при нахождении цены в зоне TakeProfit |//| в течение заданного количества баров, |//| а также при попыте выйти из этой зоны. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//| tf - таймфрейм ( 0 - текущий таймфрейм) |//+----------------------------------------------------------------------------+void ClosePosByTakeProfitZone(string sy="", int op=-1, int mn=-1, int tf=0) {
double pa, pb, po, pp, tp;
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if ((mn<0 || OrderMagicNumber()==mn) && OrderTakeProfit()>0) {
po=MarketInfo(OrderSymbol(), MODE_POINT);
if (po==0) Message("В обзоре рынка отсутствует символ "+OrderSymbol());
else {
if (OrderType()==OP_BUY) {
RefreshRates();
pb=MarketInfo(OrderSymbol(), MODE_BID);
pp=iLow(OrderSymbol(), tf, iLowest(OrderSymbol(), tf, MODE_LOW, TP.ZoneBars, 0));
tp=OrderTakeProfit()-TP.ZonePoint*po;
if (pp>tp || (pb<tp && (iHigh(OrderSymbol(), tf, 0)>tp) || (iHigh(OrderSymbol(), tf, 1)>tp))) ClosePosBySelect();
}
if (OrderType()==OP_SELL) {
RefreshRates();
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pp=iHigh(OrderSymbol(), tf, iHighest(OrderSymbol(), tf, MODE_HIGH, TP.ZoneBars, 0));
tp=OrderTakeProfit()+TP.ZonePoint*po;
if (pp<tp || (pb>tp && (iLow(OrderSymbol(), tf, 0)<tp) || (iLow(OrderSymbol(), tf, 1)<tp))) ClosePosBySelect();
}
}
}
}
}
}
}
//+------------------------------------------------------------------+ //| 信号ポインタの設定間隔を返す| //+--------------------------------------------------+ int GetArrowInterval() { int p = Period();
switch (p) { case 1: return(4); case 5: return(5); case 15: return(6); case 30: return(8); case 60: return(10); case 240: return(20); case 1440: return(40); case 10080: return(80); case 43200: return(150); } xml-ph-0015@deep
入力パラメータ: |。
nm1 - 最初の行の名前 |.
nm2 - 2行目の名前
出力Mは価格水準である。
PS.このスレッドの著者には、私のコードをここに掲載することを申し訳なく思っています。ただ、もしかしたら、クロッシングでも苦労した人がいるかもしれないと思い......。
思い当たる節があります(すでにAnnalsに 掲載)。
PS.このスレッドの作者には、私のコードをここに掲載したことをお詫びします。ただ、もしかしたら同じように交差点で苦労している人がいるかもしれないと思い......。
機能を少しいじってみました。クラッシュすることなく交差点を計算するようになりました。入力パラメータ:| nm1 - 最初の行の名前|
nm2 - 2行目の名前
出力M - 価格水準。
PS.このスレッドの作者には、私のコードをここに掲載することを申し訳なく思っています。ただ、もしかしたらクロスにも苦労している人がいるかもしれないと思い......。
さて、この関数はまさにこの価格水準を返すべきかもしれませんね!(前の変形と同じように)。それに、あなたのコードには未宣言の変数 "T "が含まれています。
まあ、それはそれを返します)
未宣言の変数について - すみません。訂正します。
double M - 交差点価格レベル。この変数は冒頭で宣言されます。
予告編では、Expert Advisorを使用して、機能の動作を確認しています。
すぐには読み込めませんでしたが...。
すぐには読み込めませんでしたが...。
このように、機能ライブラリの説明文をここに 書き込むだけで、水を差すようなことはしない方がいいと思います。
必要な人には必要なものが見つかる。
ClosePosByTakeProfitZone()関数です。
この関数は、TakeProfitに近いゾーンで価格が何本も踏み続けたり、このゾーンから出ようとすると、市場価格でポジションをクローズします。閉じる位置の選択は、外部パラメータで指定します。
イゴールさん、こんばんは。
少し前から関数の勉強を始めたのですが、36ページの関数がよくわかりませんでしたので、教えてください。
関数 GetArrowInterval()。
//+------------------------------------------------------------------+
//| 信号ポインタの設定間隔を返す|
//+--------------------------------------------------+
int GetArrowInterval() {
int p = Period();
switch (p) {
case 1: return(4);
case 5: return(5);
case 15: return(6);
case 30: return(8);
case 60: return(10);
case 240: return(20);
case 1440: return(40);
case 10080: return(80);
case 43200: return(150);
} xml-ph-0015@deep
つまり、この関数はSetArrow()関数を使用して矢印を設定するために使用され、すなわちObjectCreate(nm,OBJ_ARROW, 0, 0,0) 行で価格レベルの代わりに使用されました。
また、新バージョンの機能も不明なままです。//+------------------------------------------------------------+
//| Author : Kim Igor V. aka KimIV, http://www.kimiv.ru |
//+------------------------------------------------------------+
//| Version : 12.10.2007 |
//+--------------------------------------------+
//| Description : Return signal pointer interval |
//| Parameters: |
//| pr - ウィンドウ価格サイズに対するパーセント |
//+----------------------.
return((WindowPriceMax()-WindowPriceMin())/100*pr/Point);
WindowPriceMax()関数は、垂直スケールの最大値を返します。つまり、これは最大価格値ですが、どの期間のものでしょうか?
そしてお疲れ様でした......)))
少し前から関数の勉強を始めたのですが、36ページの関数がよくわかりませんでしたので、教えてください。
すなわち、この関数は、SetArrow()関数を使用して矢印を設定するために使用され、ラインObjectCreate(nm, OBJ_ARROW, 0, 0,0) の価格レベルの代わりに、これが行われた方法を教えてください...。
これらの機能の目的を誤解しているのではないでしょうか。価格やアイコンを使って操作することはなく、現在の時間枠に応じた距離をpipsで返すだけです。下記画像をご参照ください。
このようなマーカーを価格の近くではなく、ある距離で、例えばH1タイムフレームに置いた後、M1に切り替えると、おそらくマーカーは見えません。目盛りが変わり、アイコンが大きく下がったり上がったりします。ご指摘の機能は、どの時間軸でも常にチャート上にアイコンが表示されるようにするためのものです。
Lisi4ka330 です。
...戻り値(4,5,6,8,10...)が意味するもの
現在の時間枠に応じて、ピップ単位で距離を表示します。
Lisi4ka330です。
WindowPriceMax()関数は、垂直スケールの最大値を返します。つまり、それは最大価格値ですが、どの期間のものでしょうか?
どの期間でもない...現在のウィンドウの中だけで。例えば、下図の場合、最高値は 97.35です