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

 
EVGENII SHELIPOV #:

皆さん、ごきげんよう!!!

注文のグリッドの平均価格からグループ注文のトレーリングストップを行うEAのコードを書いています。

ログにエラーはありませんが、トロールも動きません。以下はそのコードです。このエラーが発生した場所を教えてください。ありがとうございました。

トロールの位置が違う!

このように表示されるはずです。

損益分岐価格+profit-tral! = TakeProfitであれば、トロールを開始!

このデータはどこから来ているのですか?

//+----------------------------------------------------------------------------+
//| Трейлинг стоп групповых ордеров                                            |
//+----------------------------------------------------------------------------+
void TrailingGroupOrder()
{
    price += OrderOpenPrice() * OrderLots();
    order_lots += OrderLots() ;
    for(int i = OrdersTotal()-1; i>=0; i--)
    {
     if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

オーダーオープン価格

選択された注文の建値を返します。

doubleOrderOpenPrice()。

注文は、OrderSelect() 関数で事前に選択されている必要があります。

 
MakarFX #:

ありがとうございました)

 
MakarFX #:

トロールが立っているのはそこじゃない!?

このようになるはずです。

もし、損益分岐価格+利益-トラル!=TakeProfitであれば、トロールを実行する。

Good afternoon Makar!!!!

私が理解する限りでは、これが問題のラインです。この場合、買い注文となる。

if(Bid - NormalizeDouble(price / order_lots, Digits) > TrailingStopGroupOrder*Point || OrderStopLoss() == 0)

マカーさん、もう少し詳しく教えてください。

 
MakarFX #:

トロールが立っているのはそこじゃない!?

このようになるはずです。

もし、損益分岐価格+利益-トラル!=TakeProfitであれば、トロールを実行する。

このデータはどこから来ているのですか?

今日はなぞなぞのような話だな、マカー。

また、「なぜ、損益分岐点を調べずに計算するのか?

 
MakarFX #:

トロールが立っているのはそこじゃない!?

このようになるはずです。

もし、損益分岐価格+利益-トラル!=TakeProfitであれば、トロールを実行する。

このデータはどこから来ているのですか?

オーダーオープン価格

選択された注文の建値を返します。

doubleOrderOpenPrice()。

注文は、OrderSelect() 関数で事前に選択されている必要があります。

はい、そう思っていたら、すでに書かれていたんですね。

 
EVGENII SHELIPOV #:

Good afternoon Makar!!!!

私が理解した限りでは、これが問題のラインです。この場合、買い注文となる。

マカーさん、もう少し詳しく教えてください。

注文のグループがあり、損益分岐点を定義し、ラインを作成します。これは別の関数として行う方がよいでしょう

    avg_price = NormalizeDouble(price / order_lots, Digits);
     {
     ObjectDelete(0, "AveragePriceLine");
     ObjectCreate(0,"AveragePriceLine" ,OBJ_HLINE, 0, 0, avg_price);
     ObjectSet("AveragePriceLine",OBJPROP_COLOR, Magenta);
     }

次に、取得したい利益値をpipsで指定し、avg_priceに加算/減算します。

    if (otype == OP_BUY) tp = NormalizeDouble (avg_price + TakeProfitGroupOrder*Point, Digits);
    if (otype == OP_SELL) tp = NormalizeDouble (avg_price - TakeProfitGroupOrder*Point, Digits);

そして、別のトロール機能

買いの場合:BID > avg_price = OrderModify()

for sales: if avg < avg_price = OrderModify()


残念ながら、あなたのコードには論理的なアクションが見当たりません(主観的に)。

 
EVGENII SHELIPOV #:

そう思っていたら、もう書いてあったんですね。

機能を分けて、自分が操作しやすいようにする。

以下は、OnTick()の例です。

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)
     {
      CloseOrder();
     }
   sl  = MathMax(Stoploss, MarketInfo(_Symbol, MODE_STOPLEVEL)) * Point();
   SL  = NormalizeDouble(sl*Point(),Digits);
   tp  = MathMax(Takeprofit, MarketInfo(_Symbol, MODE_STOPLEVEL)) * Point();
   TP  = NormalizeDouble(tp*Point(),Digits);
   //---
   if(CountOrders()==0&&ObjectGetInteger(0,"lab_Button",OBJPROP_STATE))
     {
      if(TradeSignal()>=0)
        {
         SendOrder(TradeSignal());
        }
     }
   //---
   if (!IsTradeAllowed()) 
     {DrawLABEL("lab_Торговля",0,0,0,clrRed,"Торговля запрещена"); return;} 
   else
     {DrawLABEL("lab_Торговля",0,0,0,clrLime,"Торговля разрешена");}
  }
//+------------------------------------------------------------------+

見ての通り、関数呼び出ししかありません

 
MakarFX #:

機能を分離して、操作しやすくする。

以下は、OnTick()の例です。

見ての通り、関数の呼び出ししかありません。

マカーさん、ありがとうございます。 思考を集中して、このように考えてみます。

 
EVGENII SHELIPOV #:

マカーさん、ありがとうございます。 自分の考えをまとめて、その方向で考えてみます。

(声を上げて)
 
Question: どうすればEAの親権を外せるか?もしかしたら、私が知らないスクリーンショットやmt4の機能が既にあるのかもしれません。ぜひ、ご教示ください。mql 3, 4, 5などを勉強する意欲と可能性がない。