[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 124

 
Notter:

こんにちは。

チャートにマーカーをつける方法を教えてください。例えば、注文が開かなかったが、少なくともチャート上で見るには、その時点で開くべきであった。

チャートにマーカーを付けたいのですが。

このように

#include <stderror.mqh>

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  int Err;
//----
       if(...........) //покупаем
          { 
          Err=OrderSend(..................);
             if(Err<0)
                SetArrow(159, Blue,"ошибка открытия № "+GetLastError(),Time[0],Open[0],2);
          }
       if(...........) //продаем
          { 
          Err=OrderSend(..................);
             if(Err<0)
                SetArrow(159, Red,"ошибка открытия № "+GetLastError(),Time[0],Open[0],2);
          }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка значка на графике, объект OBJ_ARROW.                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cd - код значка                                                         |
//|    cl - цвет значка                                                        |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время открытия бара        (0  - текущий бар)                      |
//|    p1 - ценовой уровень            (0  - Bid)                              |
//|    sz - размер значка              (0  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetArrow(int cd, color cl,
              string nm="", datetime t1=0, double p1=0, int sz=0) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[0];
  if (p1<=0) p1=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_ARROW, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1    , t1);
  ObjectSet(nm, OBJPROP_PRICE1   , p1);
  ObjectSet(nm, OBJPROP_ARROWCODE, cd);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_WIDTH    , sz);
}
 
dertop:


ああ、すみません、初めてフォーラムに書き込んで、混乱しました。最初にコピーペーストして、手書きにしようと思ったら、混乱してしまって...。でも、上の例は正しいのですが...。

MA1>MA2かつMA1<MA3かつMA3<MA4


以下のスレッドを ご覧ください。
 
Vinin:


何かおかしいぞ。

MA1>MA2、MA2>MA3となり、MA1<MA3となる。

で十分なのですから、なおさらです。

たしかに、この2つには矛盾がありますね。ただ、すべてを調べてはいなかったのです筆者にはまだまだ「難しい失敗」が待っている!
 

問題はこれだ。このような状況に遭遇するのは、今回が初めてではありません。

例えば、traalやbreakevenの関数が 毎ティックで呼び出さ れる場合、エラー1がポップアップします。というのは、ドキュメントによると

ERR_NO_RESULT   1       Нет ошибки, но результат неизвестен

開始関数でオープンに呼び出されない場合、つまり、パラメータを持つ関数を開始関数に 直接置くのではなく、すべてのバーで、つまりティックごとに呼び出されない場合、エラー - ない...

つまり、こういうことです。

int start()
{
   MovingStopLossToBU();
// Что-то дальше делаем..

なぜ、このように?

また、一般的には、どのようにすればよりインテリジェントな実装が可能になるのでしょうか?チックのたびにリソースを消費するのでしょうか?

 

Всем добрый день.

あなたの力が必要です。何が起こっているのか理解できない。

if (OrderStopLoss() != NormalizeDouble(t6,5))

{

a=10;

}

OrderStopLoss()=1.3017 とNormalizeDouble(t6,5)=1.3017 の条件はまだ成立しており、すなわち a=10 となります。しかし、それで満足してはいけない。

その理由は何でしょうか。

 
hoz:

問題はこれだ。このような状況に遭遇するのは、今回が初めてではありません。

例えば、traalやbreakevenの関数が毎ティックで呼び出される場合、エラー1がポップアップします。というのは、ドキュメントによると

開始関数でオープンに呼び出されない場合、すなわち、開始 時に直接パラメータを指定して関数を入力するのではなく、すべてのバーで呼び出す場合、すなわち、ティックで呼び出されない場合、エラー - いいえ...。

つまり、こういうことです。

なぜ、このように?

また、一般的には、どのようにすればよりインテリジェントに実装できるのでしょうか?チックのたびにリソースを消費するのでしょうか?

私は、バーで、何ピップスで行かないことをお勧めします。必要なら、そのためにリソースがあるのです。また、すでに存在する修正に対して価格を繰り返すと、「エラーなし」のエラーが発生します。だから、最初にアドバイスしたように、一歩一歩やっていくしかないんです。
 
hoz:

問題はこれだ。このような状況に遭遇するのは、今回が初めてではありません。

例えば、traalやbreakevenの関数が毎ティックで呼ばれる場合、エラー1がポップアップします。というのは、ドキュメントによると

開始関数でオープンに呼び出されない場合、つまり、パラメータを持つ関数を開始関数に 直接置くのではなく、すべてのバーで、つまりティックごとに呼び出されない場合、エラー - ない...

つまり、こういうことです。

なぜ、このように?

また、一般的には、どのようにすればよりインテリジェントな実装が可能になるのでしょうか?ティックのたびにリソースを消費することになるのでしょうか?

トロールはSLを同じレベルに移動させようとする。 トロールのレベルは現在のSLと異なるべきであるというチェックを追加する必要がある。

 
valeryk:

トロールは、SLを同じレベルに移動させようとする。トロールレベルは現在のSLと異なっていなければならない、というチェックが追加されるべきである。



そのための小切手を持っています。

if (ND(OrderStopLoss() - priceBU * pt) != 0.0)
{
  if (!OrderModify(OrderTicket(), OrderOpenPrice(), priceBU, OrderTakeProfit(), 0, CLR_NONE ))
  {
    Print ("Ошибка модификации ордера ", OrderType(), " - ", GetLastError());
  }

}
ストップ-ニューストップ(単位:b.u.)がゼロでない場合そして、修正する。そうでない場合は、モディファイを行いません。だからこそ、どうしてこうなるのかがわからないのです。結局、過去と新規の停止が 等しいかどうかを確認する必要があることを理解し、それを実行しています。
 

こんにちは!私の最初の注文と最終注文を1 T/Pに変更する方法を教えてください ありがとうございます。

gi_304 = CountTrades();

   g_price_212 = 0;

   double ld_24 = 0;

   for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {

      OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);

      if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;

      if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {

         if (OrderType() == OP_BUY || OrderType() == OP_SELL) {

            g_price_212 += OrderOpenPrice() * OrderLots();

            ld_24 += OrderLots();

         }

      }

   }

   if (gi_304 > 0) g_price_212 = NormalizeDouble(g_price_212 / ld_24, Digits);

   if (gi_332) {

      for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {

         OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);

         if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;

         if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {

            if (OrderType() == OP_BUY) {

               g_price_180 = g_price_212 + TakeProfit2 * Point;

               gd_unused_196 = g_price_180;

               gd_308 = g_price_212 - Stoploss * Point;

               gi_268 = TRUE;

            }

         }

         if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {

            if (OrderType() == OP_SELL) {

               g_price_180 = g_price_212 - TakeProfit2 * Point;

               gd_unused_204 = g_price_180;

               gd_308 = g_price_212 + Stoploss * Point;

               gi_268 = TRUE;

            }

         }

      }

   }

   if (gi_332) {

      if (gi_268 == TRUE) {

         for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {

            OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);

            if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;

            if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) OrderModify(OrderTicket(), g_price_212, OrderStopLoss(), g_price_180, 0, Yellow);

            gi_332 = FALSE;

         }

      }

   }

   return (0);


 
agat8430:

こんにちは!私の最初の注文と最終注文を1 T/Pに変更する方法を教えてください ありがとうございます。


このコードを編集して、ハックしたように見えないようにします。