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

 
solnce600:

皆さん、簡単なアイデアをコード化する方法を教えてください(おそらく条件文の中で)。

-ストップロスで取引が終了した場合

-ストップロス価格で別の取引を開始する。

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

どうぞご覧 ください。
 
Roger:

1.init()関数の中で注文を出すことはできません。 (ストラテジーテスターではまだ動作しますが、デモでは動作しません)。

2.注文を閉じるときは、あなたのケースのように逆ではなく、端から端まで数えるべきです。

ご返信ありがとうございました。
この場合、ループ演算子はテスターで調査されたもので、そのため、単純化のためにinit()で注文が開かれるのですが、これは実際のEAでは起こりません。
注文の選択順序を変更すると、確かに1ティック以内にクローズされます(以下にプログラムのコードとテスターログからのレポートを示します)。
EAの動作ロジックでは、注文を出した順に決済するつもりなので、なぜかご存知の方、アドバイスをお願いします。

敬具シュルキン

Код программы.

//+------------------------------------------------------------------+
//|                                                     Poligon1.mq4 |
//|                                            21 февраля 2013 года. |
//|Тестирование оператора цикла for.                                 |
//+------------------------------------------------------------------+
#property copyright "21 февраля 2013 года."
#property link      ""
//+------------------------------------------------------------------+
//|Объявленные переменные                                            |
//+------------------------------------------------------------------+
int Mn=357;//Magic number
int i;//Показатель счётчика итераций
double PriTP;//TP серии
int Tick;//Счётчик тиков
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----Установка серии ордеров
OrderSend(Symbol(),OP_BUY,0.5,Ask,0,NormalizeDouble(Bid-35*Point,Digits),
NormalizeDouble(Ask+35*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUY
OrderSend(Symbol(),OP_BUY,1,Ask,0,NormalizeDouble(Bid-25*Point,Digits),
NormalizeDouble(Ask+25*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUY
OrderSend(Symbol(),OP_BUY,1.5,Ask,0,NormalizeDouble(Bid-15*Point,Digits),
NormalizeDouble(Ask+15*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUY
OrderSend(Symbol(),OP_BUY,2.5,Ask,0,NormalizeDouble(Bid-15*Point,Digits),
NormalizeDouble(Ask+15*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUY
OrderSend(Symbol(),OP_BUY,3.5,Ask,0,NormalizeDouble(Bid-15*Point,Digits),
NormalizeDouble(Ask+15*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUY
OrderSend(Symbol(),OP_BUYLIMIT,1,NormalizeDouble(Ask-15*Point,Digits),0,
NormalizeDouble(Bid-40*Point,Digits),NormalizeDouble(Ask+25*Point,Digits),
NULL,Mn,0,CLR_NONE);//OP_BUYLIMIT
OrderSend(Symbol(),OP_SELLSTOP,3,NormalizeDouble(Ask-30*Point,Digits),0,
NormalizeDouble(Bid+15*Point,Digits),NormalizeDouble(Ask-75*Point,Digits),
NULL,Mn,0,CLR_NONE);//OP_SELLSTOP
//----
   PriTP=Bid;//PriTP
   Print("Кс0:"," OrdersTotal=",OrdersTotal());//Сообщение
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   Tick++;//Tick
//   Print("Кс1:"," Tick=",Tick);//Сообщение
//----
//   for(i=0;i<OrdersTotal();i++)//Инициализация цикла
   for(i=OrdersTotal()-1; i>=0; i--)//
   {
   Print("Кс2:"," Tick=",Tick," i=",i);//Сообщение
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)//Выбор ордера i
    {
   if(OrderSymbol()==Symbol())//Символ
     {
   if(OrderMagicNumber()==Mn)//Идентификационное число
      {
   if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)//Тип операции текущего выбранного ордера
       {
   OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);//Закрытие позиции
       }//Закрыто if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)
      }//Закрыто if(OrderMagicNumber()==Mn)
     }//Закрыто if(OrderSymbol()==Symbol()
    }//Закрыто if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
   }//Закрыто for(i=0;i<OrdersTotal();i++)
//----
   return(0);
  }
//+------------------------------------------------------------------+
Записи в журнале тестера.

2013.03.08 13:28:19     Poligon1 EURUSD,M15: removed
2013.03.08 10:14:14     2013.02.11 12:15  Poligon1 EURUSD,M15: Кс2: Tick=3 i=0
2013.03.08 10:14:14     2013.02.11 12:15  Poligon1 EURUSD,M15: Кс2: Tick=3 i=1
2013.03.08 10:13:50     2013.02.11 12:15  Poligon1 EURUSD,M15: Кс2: Tick=2 i=0
2013.03.08 10:13:50     2013.02.11 12:15  Poligon1 EURUSD,M15: Кс2: Tick=2 i=1
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: close #1 buy 0.50 EURUSD at 1.3397 sl: 1.3360 tp: 1.3432 at price 1.3395
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: Кс2: Tick=1 i=0
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: close #2 buy 1.00 EURUSD at 1.3397 sl: 1.3370 tp: 1.3422 at price 1.3395
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: Кс2: Tick=1 i=1
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: close #3 buy 1.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 at price 1.3395
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: Кс2: Tick=1 i=2
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: close #4 buy 2.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 at price 1.3395
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: Кс2: Tick=1 i=3
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: close #5 buy 3.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 at price 1.3395
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: Кс2: Tick=1 i=4
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: Кс2: Tick=1 i=5
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: Кс2: Tick=1 i=6
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: Кс0: OrdersTotal=7
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: open #7 sell stop 3.00 EURUSD at 1.3367 sl: 1.3410 tp: 1.3322 ok
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: open #6 buy limit 1.00 EURUSD at 1.3382 sl: 1.3355 tp: 1.3422 ok
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: open #5 buy 3.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 ok
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: open #4 buy 2.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 ok
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: open #3 buy 1.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 ok
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: open #2 buy 1.00 EURUSD at 1.3397 sl: 1.3370 tp: 1.3422 ok
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: open #1 buy 0.50 EURUSD at 1.3397 sl: 1.3360 tp: 1.3432 ok
2013.03.08 10:13:26     Poligon1 test started
2013.03.08 10:13:24     Poligon1 EURUSD,M15: loaded successfully

 
貴重な情報をどうもありがとうございました。教えていただいたことは、ぜひ今後に活かしていきたいと思います。
 
borilunad:

ストップロスの価格と全く同じに開くことはできませんが、同じ方向、または反対の方向に開くように条件をつけることができます

ここでは、キムさんの「便利な関数」の中から、条件に入れる関数の呼び出しを紹介します。

isCloseLastPosByStop - ストップによる最後のポジションを閉じるかどうかのフラグを返す

if(isCloseLastPosByStop() == 0) or ... == 1) and whatever you want ..........。

関数はこちら:https://www.mql5.com/ru/forum/131859

そして、スタートの外に置く!

そして、私はあなたにお願いします!あなたは、勤勉、正確かつ忍耐強く、自分自身でこれらのすべてを行うことができ、そうでなければ、あなたはヒントから何も学ぶことはありません!私は、あなたがそれを行うことができます。

知識は、自分の十分な努力によってのみ得られるものなのです日々の探究心に満ちた仕事に打ち込もうがんばってください。


貴重な情報をどうもありがとうございました。教えていただいたことは、ぜひ今後に活かしていきたいと思います。
 

ごきげんよう。

TCが注文のコメントを変更したり、削除したりできる状況があるのかどうか教えてください。

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

 
Gek34:

TCが注文のコメントを変更したり、削除したりできる状況があれば教えてください...?

一例として
Native comment
e121220_3in1 01

ロールオーバー後、DCを付加した場合。

E121220_3IN1 01[SWAP](スワップ

つまり、コメント付きのオーダーを検索する場合、あらかじめネイティブコメントの行の長 さを決めておき、検索中は変更されたコメントの最初の部分のみを該当する長さでチェックすればよいのです。または、チェック対象のコメントにネイティブの文字列があるかどうかをチェックします。

 

Shurkin:

返信ありがとうございました。
この場合、ループオペレータの動作はテスターで正確に調査されており、そのため、init()で注文をオープンするのは簡略化のためで、実際のEAでは起こりません。
注文の選択順序を変更すると、確かに1ティック以内に注文がクローズされます(以下にプログラムのコードとテスターログからのレポートを示します)。
MQL4では注文を選択できないのが不思議です。 Expert Advisorの作業ロジックでは、注文は開いた順番に正確に閉じるはずなので、理由をご存知の方はアドバイスをお願いします。

敬具シュルキン



ロジックは正しい - 注文の注文番号と同じになるはずです。 1つの注文が終了すると、他のすべての注文が再計算されます。この構造を試してみる

 for(i=0, int k=0; i<OrdersTotal();i++,k++)//
   {
   Print("Кс2:"," Tick=",Tick," i=",i);//Сообщение
   if(OrderSelect(k,SELECT_BY_POS,MODE_TRADES)==true)//Выбор ордера i
    {
   if(OrderSymbol()==Symbol())//Символ
     {
   if(OrderMagicNumber()==Mn)//Идентификационное число
      {
   if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)//Тип операции текущего выбранного ордера
       {
   OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);//Закрытие позиции
   k--;
       }//Закрыто if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)
      }//Закрыто if(OrderMagicNumber()==Mn)
     }//Закрыто if(OrderSymbol()==Symbol()
    }//Закрыто if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
   }//Закрыто for(i=0;i<OrdersTotal();i++)
 
Gek34:

ごきげんよう。

TCが注文のコメントを変更したり、削除したりできる状況があるのかどうか教えてください。

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


注文のコメントがガラッと変わった経験があります。また、部分クローズ時にマジックがゼロになることがある(部分クローズはサーバーが主導で行う)。現在では、後者を制御するアドバイザーが別に存在し、「エイリアン」オーダーなどの不整合を監視し、タイムリーにPushメッセージで 通知するループ型になっています。
 

正しい条件の書き方を教えてください。

1.オーダーシンボル=シンボル、オーダーマジック=135の場合

2.保留中の BAYSTOP注文がない場合

3.オープンオーダーがない場合 BAY OR(ある場合)ストップロス>オープンプライス

4.価格がMAとフラクタルアップの間にある場合

買い急ぎ注文

というように書かれています。

 static bool flag ;

   if(NewBar()==true)

     flag = true; 

     for(int i=0;i<total-1;i++) 

         {

         OrderSelect(i,SELECT_BY_POS); 

          if(OrderSymbol()==Symbol() && OrderMagicNumber()==135) 

          { 

          if(OrderType()<=OP_BUYSTOP) 

           {

           if((OrderType()<=OP_BUY) || (OrderType()==OP_BUY && OrderStopLoss()>OrderOpenPrice()))  

            { 

            if(Ask<m && Ask>ma && frUP>0 && flag)

            {

              double price = NormalizeDouble(frUP+30*Point+(Ask-Bid)*Point,Digits);

             double stoploss = NormalizeDouble(price-sl*Point-30*Point,Digits);

             double takeprofit = NormalizeDouble(price+tp*Point,Digits);

             int ticket = OrderSend(Symbol(),OP_BUYSTOP,Lots,price,5,stoploss,takeprofit,"R",135,TimeCurrent()+55000,Blue);

             if(ticket>0)

               {

               Alert("R!Отложенный ордер BUYSTOP!!! ",Symbol());

               flag = false;

               }

               else

               {

               Print("Lots= ", Lots,"price= ", price,"stoploss= ", stoploss,"takeprofit= ", takeprofit,"Ошибка № ",GetLastError());      

               return;

               }

             }

           }

         }

       }

     } 

が動作しない!何が間違いなのか教えてください。

 

次のような問題が発生する可能性がありますので、アドバイスをお願いします。

外部 機能を利用したインジケーターがあります。コンパイルされたライブラリコードは、librariesフォルダ、descriptors - in includeに配置されます。

接続 #include <lib_Zemckikh.mqh>.インジケーターの最初の実行では、すべてのライブラリ機能が正常に動作し、インジケーターはチャートに表示されます。パラメータ変更後(インジケータの新規計算後)、ライブラリ関数が呼び出されず、インジケータが表示されず、パラメータ変更後に「エキスパート」タブに項目がない。

ライブラリの接続を除外し、必要な関数をインジケータファイルに配置(関数を直接コンパイル)すれば、すべて正常に動作します。

何が悪いのか理解できない。フォーラムを汚したくないので、コードは添付していません。必要であれば、直接お送りしますよ。