初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 302

 
mavar:

乾杯今日、MT5で初めてのEAをローンチしました!

市場の正しい状況がやってきて、エキスパート・アドバイザーはどんどん買い始めた!!!少なくとも私は、なんとか間に合わせることができました。コードのどこがおかしいのか、教えてください。1ロットだけ買って、すぐにストップロスとテイクプロフィットを設定すべきと思いました。彼が何かを買うとすぐに、変数Bye_openedが 真になり、 ストップが発動されるまで、その後の取引を行えないようにしなければならない。また、ストップをかけるために最後のトレードの 価格を知るにはどうしたらいいのでしょうか?


でも、何か間違ったことをしたようです。私の間違いをご指摘ください。

ポジションがオープンポジションのリストにあるよりも早く、ティックが来ることがあります。だから、あなたのチェック

if(PositionSelect(_Symbol)==true)

はしばらく動作せず、その間にいくつかのエントリーが経過します。上記のコードは、tick ハンドラ内にあることを想定しています。

 
pako:

このスクリプトをscriptsフォルダに入れ、ユニターでこのスクリプトを開き、コンパイルしてください。

取引所が開いたら、このスクリプトをチャート上にドラッグします。

ありがとうございます、自分で考えて、すべてうまくいきました。
 
皆さんこんばんは、トロールのコードを教えてください。ありがとうございます。
 
PokrovMT5:
皆さんこんばんは、トロールのコードを教えてください。ありがとうございます。

サイト内検索をご利用ください。難しいことではありません。https://www.mql5.com/ru/search#!keyword=%D1%82%D1%80%D0%B0%D0%BB

 
barabashkakvn:

サイト内検索をご利用ください - 難しいことではありません: https://www.mql5.com/ru/search#!keyword=%D1%82%D1%80%D0%B0%D0%BB

ありがとうございました。
 
Dima_S:

オープンリストにあるポジションよりも早くティックが出てくることがあります。だから、あなたのチェック

はしばらく動作しませんので、その間は複数のエントリーがあります。上記のコードは、tick ハンドラ内にあることを想定しています。

Dimaさん、そのコードはティック処理ブロックの中にあります。この問題を解決する正しい方法は何でしょうか?QuickBooksでも同じ問題があって、ロボットが必要以上に買い込むことがよくあるんです。2回目の遅延に置いて、条件を満たしたときに変化する変数を別途追加しただけなのですが、そこにも問題がありました。取引所で注文が拒否され、変数がすでに「取引」という値を持っていて、ロボットが取引しないこともありました。


MQL5で、ロボットが与えられた条件で指定されたロット数を購入し、購入したロットをすべて売却するまで指定されたロット数以上は購入しないように、正しく問題を解決するにはどうすればよいでしょうか?

 

購入後に一時停止して、確実に取引所からの回答を待ったほうがいいのでしょうか?

Sleep(1000); //一時停止しましたか?

 

ストップロスが動かない

は書き込みます。

--注文の変更 -> 価格 open:1.3111 BID :1.3121 sl 1.3109
失敗した修正注文#3 1.31110の買い指値1.00 sl: 1.31080 tp: 0.00000 -> 1.31110, sl: 1.31090 tp: 0.00000 [Invalid stops] [無効なストップ]です。

--注文を変更する <- result:10016

なぜ?

void MoveStopLoss()
{
   ulong  ticket     = OrderGetTicket(0);
   double price      = OrderGetDouble(ORDER_PRICE_OPEN);
   double slossPrev  = OrderGetDouble(ORDER_SL);
   double sloss      = SymbolInfoDouble(_SYMBOL, SYMBOL_ASK) - SymbolInfoDouble(_SYMBOL, SYMBOL_POINT)*15;

      if (slossPrev < sloss)
      {
         MqlTradeRequest request={0};
         MqlTradeResult  result={0};
         request.action       = TRADE_ACTION_MODIFY;        // Тип выполняемого действия
         request.order        = ticket;                     // Тикет ордера (для модификации ордеров)
         request.price        = price;                      // Цена 
         request.sl           = sloss;                      // Уровень Stop Loss ордера
         request.tp           = 0;                          // Уровень Stop Loss ордера
         request.type_time    = ORDER_TIME_DAY;             // Тип ордера по времени действия
   
         Print ("--Modify order -> ", " price open:", price, " BID :", SymbolInfoDouble(_SYMBOL, SYMBOL_BID), " sl ", request.sl);
         bool ret = OrderSend (request, result);
         Print ("--Modify order <- результат:", result.retcode);      
      }
}
 
mq35:

ストップロスが動かない

は書き込みます。

--注文の変更 -> 価格 open:1.3111 BID :1.3121 sl 1.3109
失敗した修正注文#3 1.31110の買い指値1.00 sl: 1.31080 tp: 0.00000 -> 1.31110, sl: 1.31090 tp: 0.00000 [Invalid stops] [無効なストップ]です。

--注文を変更する <- result:10016

なぜ?

SLを正常化するようにする。
 

ノーマライズは役に立ちません。同じく、ソップロスは引き上げられず

--注文作成 -> ASK:1.3121 価格:1.3111 sl 1.3106

買い指値1.00 EURUSD at 1.3111 (1.3121) sl: 1.3106 (1.3118 / 1.3121 / 1.3118)
--注文を作成する <- result:10009

--注文の変更 -> 価格 open:1.3111 BID :1.3119 sl 1.3107
注文修正 [#3 buy limit 1.00 EURUSD at 1.3111].

--注文を変更する <- result:10009

--注文の変更 -> 価格 open:1.3111 BID :1.312 sl 1.3108
注文修正 [#3 buy limit 1.00 EURUSD at 1.3111].

--注文を変更する <- result:10009

--注文の変更 -> 価格 open:1.3111 BID :1.3121 sl 1.3109
失敗した修正注文#3 1.31110の買い指値1.00 sl: 1.31080 tp: 0.00000 -> 1.31110, sl: 1.31090 tp: 0.00000 [Invalid stops] [無効なストップ]です。
--注文を変更する <- result:10016
理由: