MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1341

 
DanilaMactep:

私は、このようにオフセットを設定するための価格を計算しました(マカー、あなたは少なくとも私は触れないタイプです;-))。

計算された値が許容範囲内にあるかどうかを確認するにはどうすればよいのでしょうか。また、計算された値が許容範囲より小さい場合、注文はとにかく最小限の距離で開かれることを確認するにはどうすればよいのでしょうか。

これを試してみてください。

きっとわかると思うんです。

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 02.07.2013                                                     |
//|  Описание : Выполняет корректирование ценовых уровней под STOPLEVEL.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование торгового инструмента                                 |
//|    op - торговая операция                                                  |
//|    pp - цена открытия/установки                                            |
//|    sl - ценовой уровень StopLoss                                           |
//|    tp - ценовой уровень TakeProfit                                         |
//+----------------------------------------------------------------------------+
void CorrectingPrice(string sy, int op, double& pp, double& sl, double& tp) {
  if (sy=="" || sy=="0") sy=Symbol();
  RefreshRates();
  int    di=MarketInfo(sy, MODE_DIGITS);
  int   msl=MarketInfo(sy, MODE_STOPLEVEL);
  int    sp=MarketInfo(sy, MODE_SPREAD);
  double mp=MarketInfo(sy, MODE_POINT);
  double pa=MarketInfo(sy, MODE_ASK);
  double pb=MarketInfo(sy, MODE_BID);
  double ds=NormalizeDouble(pp-sl, di);
  double dp=NormalizeDouble(pp-tp, di);

  if (msl==0) msl=2*sp;
  switch (op) {
    case OP_BUY:
      pp=pa;
      sl=pp-ds;
      tp=NormalizeDouble(pp-dp, di);
      if (sl>pp-msl*mp) sl=pp-msl*mp;
      if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
      break;
    case OP_SELL:
      pp=pb;
      sl=NormalizeDouble(pp-ds, di);
      tp=pp-dp;
      if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
      if (tp>pp-msl*mp) tp=pp-msl*mp;
      break;
    case OP_BUYLIMIT:
      if (pp>pa-msl*mp) {
        pp=pa-msl*mp;
        sl=pp-ds;
        tp=NormalizeDouble(pp-dp, di);
      }
      if (sl>pp-msl*mp) sl=pp-msl*mp;
      if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
      break;
    case OP_BUYSTOP:
      if (pp<pa+msl*mp) {
        pp=pa+msl*mp;
        if (sl>0) sl=pp-ds;
        if (tp>0) tp=NormalizeDouble(pp-dp, di);
      }
      if (sl>pp-msl*mp) sl=pp-msl*mp;
      if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
      break;
    case OP_SELLLIMIT:
      if (pp<pb+msl*mp) {
        pp=pb+msl*mp;
        sl=NormalizeDouble(pp-ds, di);
        tp=pp-dp;
      }
      if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
      if (tp>pp-msl*mp) tp=pp-msl*mp;
      break;
    case OP_SELLSTOP:
      if (pp>pb-msl*mp) {
        pp=pb-msl*mp;
        sl=NormalizeDouble(pp-ds, di);
        tp=pp-dp;
      }
      if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
      if (tp>pp-msl*mp) tp=pp-msl*mp;
      break;
    default:
      Message("CorrectingPrice(): Неизвестная торговая операция!");
      break;
  }
}
 
Alekseu Fedotov:

これを試してみてください。

コツがつかめそうです。

Alexey、このコードの一部をどうもありがとうございました。しかし、残念ながら脳梗塞の影響で他の人のコードを読むことができません。このコードの使い方の説明と、何をどのように付ければいいのか、お勧めを教えてもらってもいいでしょうか。

ここで、私の頭に浮かんだのはこんな感じでx-barの最低 価格を探してました。

  int min_bars= iLowest(NULL, // ТЕКУЩИЙ СИМВОЛ
          double min_Price=iHigh(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
          PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МИНИМУМА
          min_bars//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        

しかし、最低価格を安値ではなく、aihaiとしたため、これは正しくありません。

だから、難しいことでなければ、割引コードの一部を使用する方法を送ってください...。

 

Hi all againJ さんが書いてくださったアドバイスを前回の投稿に当てはめてみたのですが、役に立ちませんでした まだエラー130Lが出ますが ストップロスそのものではなく、建値が原因だと思わ れます。 このようにローソク足数x本分の最大値・最小 値を決定することで、買いストップ・売りストップの始値を求めます。

          int max_bars= iHighest(NULL, // ТЕКУЩИЙ СИМВОЛ
          PeriodForWork_pending_orders,// ТФ ДЛЯ ПОИСКА МАКСИМУМА  УСТАНОВКИ ОТЛОЖЕННОГО ОРДЕРА
          MODE_HIGH,// ИЩЕМ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ ХАЙ
          range_max // ДИАПОЗОН ПОИСКА ИЗ ЭН СВЕЧЕЙ
          ); // ПОЛУЧАЕМ НОМЕР СВЕЧИ НА КОТОРОЙ ИМЕЕТСЯ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ
          double max_Price=iHigh(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
          PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МАКСИМУМА
          max_bars//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        
          
          );  //КОНЕЦ ПОЛУЧЕНИЯ ДАННЫХ ДЛЯ ПОКУПАК*********** 
          
          //----ПОЛУЧЕНИЕ ДАННЫХ ДЛЯ ОТЛОЖЕННЫХ ПРОДАЖ
          
          
                    int min_bars= iLowest(NULL, // ТЕКУЩИЙ СИМВОЛ
          PeriodForWork_pending_orders,// ТФ ДЛЯ ПОИСКА МАКСИМУМА  УСТАНОВКИ ОТЛОЖЕННОГО ОРДЕРА
          MODE_HIGH,// ИЩЕМ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ ХАЙ
          range_max // ДИАПОЗОН ПОИСКА ИЗ ЭН СВЕЧЕЙ
          ); // ПОЛУЧАЕМ НОМЕР СВЕЧИ НА КОТОРОЙ ИМЕЕТСЯ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ
          double min_Price=iLow(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
          PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МАКСИМУМА
          min_bars//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        
          
          ); // КОНЕЦ АЙЛОУ

私は全く同じストップとatpを使い、固定で成行注文もエラーなく開くので、問題はストップにあるのではありません。逆指値注文を設定するための価格の計算に問題があることを意味します。私はこのように注文そのものをオープンします。

OrderSend(Symbol(),OP_SELLSTOP,lot,min_Price,slippages,min_Price+sl , min_Price-tp ,comment_ao_otloj_sell); // ОТКРКЫВВАЕМ ОТЛОЖЕННЫЙ СЕЛ ОРДЕР

OrderSend(Symbol(),OP_BUYSTOP,lot,max_Price,slippages,max_Price-sl,max_Price+tp ,comment_ao_otloj_buy,magik_number,TimeCurrent()+order_life_time); // ОТКРЫВАЕМ ОТЛОЖЕННЫЙ БАЙ ОРДЕР


P/Sと言い忘れましたが、保留中の注文を使って、ポジションを開くためのある種の価格フィルターをシミュレートしたいと思います。言い換えれば、価格が正しい方向に行けば、保留中の注文は発動しますが、そうでなければ、キャンセルされ、私は市場から退出することになるのです。初値の決め方で間違っているところは?また、価格フィルターで簡単に解決する方法はないでしょうか?

p/s とても親切に、適用できるコードを書いた場合、コードを読むのに深刻な問題があるので、その詳細な説明を書いてください。詳しい説明というのは、このコードは何のためにあるのか、どのように応用できるのか(変数にくっつけて何かする、とか、コードへのコメントをもっとわかりやすく書いてください)、ということです。よろしくお願いします ;-)知識を持っており、経験を持っているP / Sは、によって行くことはありません兄弟的に役立つ - 周りにねじ込むことはありません;-)杯OPを完了する必要があります;-)。

 
仲間だ!

物を使って仕事を した人。手動で描いた三角形、楕円、四角形(チャート上に名前があると思います)が何らかのアクション、例えば(価格がオブジェクトにヒットした場合の)アラートを実行するようなコードの例を教えてください。とてもお願いしているのです。私はあまり詳しくないので、参考書の理論が理解できないのですが、原理は初歩的なものなのでしょう。
 
DanilaMactep:

Hi all againJ さんが書いてくださったアドバイスを前回の投稿に当てはめてみたのですが、役に立ちませんでした まだエラー130Lが出ますが ストップロスそのものではなく、建値が原因だと思わ れます。 このようにローソク足数x本分の最大値・最小 値を決定することで、買いストップ・売りストップの始値を求めます。

私は全く同じストップとatpを使い、固定で成行注文もエラーなく開くので、問題はストップにあるのではありません。保留注文を設定するための価格の計算に問題があることを意味します。私はこのように注文そのものをオープンします。


つまり、価格が正しい方向に進めば、保留中の注文が発動し、そうでなければキャンセルされ、私は市場から退場することになります。初値の決め方で間違っているところは?また、価格フィルターで簡単に解決する方法はないでしょうか?

p/s とても親切に、適用できるコードを書いた場合、コードを読むのに深刻な問題があるので、その詳細な説明を書いてください。詳しい説明というのは、このコードは何のためにあるのか、どのように応用できるのか(変数にくっつけて何かする、とか、コードへのコメントをもっとわかりやすく書いてください)、ということです。よろしくお願いします ;-)P / Sの知識を持っており、経験を持っている人が行くことはありません、兄弟的に役立つ - 周りにねじ込むことはありません;-)私は聖杯O_oを終了する必要があります;-)。

iLowest関数において、MODE_HIGHの代わりに、MODE_LOWを挿入します。

 

ヒントを教えてください。グラフに線分を描きました。セグメントの開始価格と終了価格を知りたいのですが。それは可能なのか?

ファイル:
EURUSDM1.png  22 kb
 
Forallf:

ヒントを教えてください。グラフに線分を描きました。セグメントの開始価格と終了価格を知りたいのですが。それは可能なのか?

で行うことができます。
 
Forallf:

ヒントを教えてください。グラフに線分を描きました。セグメントの開始価格と終了価格を知りたいのですが。それは可能なのか?

このセグメントには、オリジナルの名称を付けることが望まれる

 
Alekseu Fedotov:

iLowest関数において、MODE_HIGHの代わりに、MODE_LOWを挿入します。

このケースを修正し、2年間のテストでは、130 26のエラーが発生しました。同時に115件の取引が正常に開始された
 
Порт-моне тв:
仲間だ!

物を使って仕事を した人。手動で描いた三角形、楕円、四角形(チャート上に名前があると思います)が何らかのアクション、例えば(価格がオブジェクトにヒットした場合の)アラートを実行するようなコードの例を教えてください。とてもお願いしているのです。私はあまり詳しくないので、参考書の理論が理解できないのですが、原理は初歩的なものなのでしょう。

誰か助けて