[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 665

 
Roger:
ゼロバーからではなく、最初のバーから高値と安値をカウントし、ゼロバーではBidがMinより低くなることはできません。
I.e. i=1; ?そしてBidとAskはそのままに?
 
eugggy:
二重
Min=Bid、変数宣言

マックス=ビッド

____________________________________________________________________________________________

for (i=0;i<=20-1;i++) オープニング基準

{
if (Low[i]<Min) Min=Low[i]:
if (High[i]>Max) Max=High[i];

}

if (..................&&Ask>Max)

{

Opn_B=true; //オープン Buy

}

if (............&&Bid<Min)

{

Opn_S=true; //Sellを開く

}

___________________________________________________________________________________________

醜くてすみません。コードがうまくいかず、削除してしまったので、記憶から書くしかなかったのです。でも、プロであるあなたには理解できるはず(だといいのですが)。

____________________________________________________________________________________________

お世辞がうまい :))私もあなたと同じ初心者です...。

extremumprice.mq4 
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
extern int  Quant_Bars  =30;                    // Количество баров
bool        OpnBuy      =false,
            OpnSell     =false;
//--------------------------------------------------------------------
int start()                                     // Спец. функция start
  {
   int i;                                       // Номер бара 
   double Minimum=Bid,                          // Минимальная цена
          Maximum=Bid;                          // Максимальная цена
 
   for(i=0;i<=Quant_Bars-1;i++)                 // От нуля (!) до..
     {                                          // ..Quant_Bars-1 (!)
      if (Low[i]< Minimum)                      // Если < известного
         Minimum=Low[i];                        // то оно и будет мин
      if (High[i]> Maximum)                     // Если > известного
         Maximum=High[i];                       // то оно и будет макс
     }
//--------------------------------------------------------------------

   if (iOpen(NULL,0,1)>Maximum)
      {
         OpnBuy =true:
         OpnSell=false;
      }
   if (iOpen(NULL,0,1)<Minimum)
      {
         OpnSell=true;
         OpnBuy =false:
      }   
//-------------------------------------------------------------------
//  А тут код открытия позиций.  if (OpnBuy)  {открываем Бай};
//                               if (OpnSell) {открываем Селл};
// Но обязательно нужно сделать проверку на существование уже открытой позиции,
// иначе они будут открываться на каждом тике пока присутствует сигнал...
   return;                                      // Выход из start()
  }
//--------------------------------------------------------------------
こんな感じです。確認せず、その場で書いてしまった...。
 
artmedia70:

そこで、こんな理屈を考えてみました。

1. 保留注文にマジックナンバー、例えば101を設定し、注文をポジションに変換するフラグ、例えばConvOrd=falseをリセットします。

2. マジック101の位置が出現したかどうかを確認し、出現していれば、変換フラグConvOrd=trueを設定する。

3.ConvOrdの真偽を確認し、ConvOrd==trueの場合。
マジックナンバー101の位置が存在するかどうかを確認し、存在しない場合は
は、すでに終了していることを意味します。

{ConvOrd=falseを選択解除し、新しい保留を設定する;}。

フラッグはなくても大丈夫だと思うのですが...。


理屈はわかるが、コードでどう実装すればいいのかわからない。いろいろなバリエーションを試しましたが、結果が出ません。私はダミーだと思います。だから、ここに書いたのです。P.663で、私のコードをお見せしました。もし興味があれば、どうすれば改善されるのか、せめて教えてください。ありがとうございます。
 
artmedia70 さん、Roger さん、ありがとうございます。私はそれを理解したと思う、確かにバー0での価格は、最小値と最大値よりも低いまたは高いことはできません、私はそれを考えず、Min変数の値としてAskを追加しました、今それは動作するようです。アートメディア70、私に比べて、ほとんどはプロです)))いつもありがとうございます。
 
dimon74:
理屈はわかるが、コードでどう実装すればいいのかわからない。いろいろなバリエーションを試しましたが、結果が出ません。私はダミーだと思います。だから、ここに書いたのです。P.663で、私のコードをお見せしました。もし興味があれば、どうすれば改善されるのか、せめて教えてください。ありがとうございます。

もっと簡単な方法で、SellStop注文を出すときに、TakeProfitの値を覚えておいて、Bidがその価格より下がったらBuyに出すという方法を試してみてください。
 
Roger:

もっと簡単な方法で、SellStop注文を出すときに、TakeProfitの値を覚えておいて、Bidがこの価格より下がったら、Buyに出すという方法を試してみてください。
ありがとうございます!このバリエーションはすでに試しましたが、私の戦略には適していません。
 
dimon74:
アドバイスありがとうございます!このオプションはすでに試しましたが、私の戦略には適していません。
プロが許してくれますように、それでもイゴール・キムの便利な機能のリストをあげますから、もしかしたら自分で作るかもしれませんよ・・・。:)
ファイル:
 

なぜ一度に2つのロック位置があるのか理解できない。その理屈はこうだ。

エクイティが前回の利益の一定割合に達したら、すべてのポジションをクローズする...。これはちゃんと機能している...次は...

エクイティが以前の値から一定の割合で下落した場合、最も損失の大きいポジションを探し、それが誰であるかを特定する...。買うか売るか...

を開き、ダブルロットで反対方向にロックポジションを開きます。そして、彼らの(負けポジションとロックポジションの)合計利益を調べ、それが大きくなったらすぐに、その利益を確認します。

仮に10pipsとすると、それを閉じる...

論理的には、次のティックでエクイティをチェックし、問題なければ作業を継続するはずなのですが......。また何も問題なければ、次の吸い魔を探すことになるのですが・・・。

しかし、なぜか2つのロック位置が同時に開いてしまう...。と売り買いし、ロットが0.1だった場合、最初のロックはロットの2倍=0.2が開きます。

で、2つ目はそれをまた2倍にして0.4ロットで開く・・・。敬称略、ロックとは一体何なのか、太陽の下の場所を争っているのだとしたら・・・。:(

コードを添付しておきますので、どなたか突いてみてください。を指します。

//----------------- Закрытие позиций если эквити выросло на N процентов ---------------------------
            
   if (Equ_NEW>=Equ_OLD+EquPerc)                       // Новое эквити больше старого на процент прибыли..
   {                                         
//      ClosePosBySizeLossInCurrency(NULL, -1, -1, 0); // Закрытие всех убыточных позиций
      ClosePosFirstProfit(NULL, -1, -1);           // Закрываем все позиции, сначала прибыльные
      DeleteOrders(NULL, -1, -1);                  // Удаляем ордера
      Equ_NEW=AccountEquity();                     // Запоминаем новое значение эквити
      Equ_OLD=Equ_NEW;                             // и вписываем его в "старое"
      CountClsEQU++;                               // Увеличиваем счётчик кол-ва закрытий для ф-ции вывода информации
      LockBuy51 =true;                             // Разрешаем открытие локирующих
      LockSell51=true;                             // позиций Buy и Sell
      OpnBuy51  =true;                             // и вообще разрешаем открываться
      OpnSell51 =true;                             // в любую сторону... 
   }

//------------- Включение вывода убыточных позиций в ноль, если эквити упало на N процентов -----------------------
               
   if (Equ_NEW<=Equ_OLD-EquPerc/2)                 // Новое эквити меньше старого на столько-то процентов...
      {                                         
         Trade=false;                              // Запрещаем торговлю
//-------------- Закрытие двух позиций, если ранее был установлен лок на убыточную ------------- 
        
         if (OrderSelect(TicketLoss, SELECT_BY_POS, MODE_TRADES))    // Выбираем убыточную позицию (если её тикет
            {                                                        // ранее был сохранён в TicketLoss)
               double prloss=OrderProfit()+OrderSwap();              // Размер профита убыточной позиции
               int typeloss =OrderType();                            // Тип убыточной позиции
               int mnloss   =OrderMagicNumber();                     // Magic убыточной позиции
            }
         if (OrderSelect(TicketLock, SELECT_BY_POS, MODE_TRADES))    // Выбираем локирующую позицию (если её тикет
            {                                                        // ранее был сохранён в TicketLock)
               double prlock=OrderProfit()+OrderSwap();              // Размер профита локирующей позиции
               int typelock =OrderType();                            // Тип локирующей позиции
            }
         if (prloss+prlock>=10*Point)                                // Если их суммарный профит больше 10 пунктов
            {
                ClosePositions(NULL, typelock, 5100);           // Закрываем локирующую позицию
               ClosePositions(NULL, typeloss, mnloss);         // Закрываем убыточную позицию
            }
//--------------- Поиск убыточной позиции и установка локирующей -------------------------  
       
         double Loss=0;                                        // Последнее значение убытка
         int    i, k=OrdersTotal(), OrdTicket=-1;

         for (i=k-1; i>=0; i--) {                              // Цикл по всем ордерам терминала
            if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
               if ((OrderProfit()+OrderSwap()<0)) {            // Если профит позиции меньше 0
                  if (Loss>OrderProfit()+OrderSwap()) {        // Если последнее значение убытка больше убытка позиции  
                     Loss=OrderProfit()+OrderSwap();           // Значит тут убыток больше, запоминаем как последнее
                     OrdTicket=i;                              // Запоминаем номер убыточной позиции
                  }
               }
            }
         }
            if (OrdTicket>=0) {
               if (OrderSelect(OrdTicket, SELECT_BY_POS, MODE_TRADES)) {   // Выбираем позицию по тикету
                  TicketLoss=OrdTicket;                                    // Запоминаем как тикет убыточной позы
                  if (OrderType()==OP_BUY)                                 // Если её тип Бай
                     {
                        Magic=5100;                                              // Задаём магик... 
                        New_Comm="Sell_M5_Стратегия_1_Локирующая позиция";       // Задаём комментарий для позиции
                        Lots_New=NormalizeLot(OrderLots()*2, False, NULL);       // Увеличим лот в два раза
                        if (!ExistPositions(NULL, OP_SELL, 5100, 0)){            // Если нет локирующего Sell
                        OpenPosition(NULL,OP_SELL,Lots_New,0,pb-tp*100*po,Magic,New_Comm);} // Открываем локирующий...
                        if (ExistPositions(NULL, OP_SELL, 5100, 0))              // Проверяем, заодно и выбираем её
                              {TicketLock=OrderTicket();}                        // Сохраняем тикет локирующего Sell
                     }
                  if (OrderType()==OP_SELL)
                     {
                        Magic=5100;                                              // Задаём магик... 
                        New_Comm="Buy_M5_Стратегия_1_Локирующая позиция";        // Задаём комментарий для позиции
                        Lots_New=NormalizeLot(OrderLots()*2, False, NULL);       // Увеличим лот в два раза
                        if (!ExistPositions(NULL, OP_BUY, 5100, 0)){             // Если нет локирующего Buy
                        OpenPosition(NULL,OP_BUY,Lots_New,0,pa+tp*100*po,Magic,New_Comm);} // Открываем локирующий...
                        if (ExistPositions(NULL, OP_BUY, 5100, 0))               // Проверяем, заодно и выбираем её
                              {TicketLock=OrderTicket();}                        // Сохраняем тикет локирующего Buy
                     }
               }
            }
         }

からスタートします。

//------------- Включение вывода убыточных позиций в ноль, если эквити упало на N процентов -----------------------

...どこかでジョイントを...

 

ページ番号"666":-)

 
こわい・・・。うぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉ