KimIVの便利な機能 - ページ 87

 
keekkenen писал(а)>>

いいえ、それは動作しません...1つの注文 - 1ロット、あなたが3ロットで注文を開いている場合は、あなたが望む方法 - 最初に1、次に1、次に1 - 注文は、すべてのロットを閉じて、すなわち、それが開かれたのと同じロットで注文を閉じ、あなたは部分的に注文を閉じることはできません...です。

私は注文を部分的に閉じるトラールを持っているのですが、それは間違いです。

 

もちろん、新規受注はないのでしょうか?

 
keekkenen さん2009.07.17 15:48
hope писал(а)>> 同じではない。ロットの3分の1がクローズされます(条件の1つにより、価格が+150ポイントに達したとします)。2つ目の3分の1は、例えばオープニングから+300ptsの時に閉じる、など。

いいえ、それはそのように動作しません...1つの注文 - 1ロット、あなたは3ロットで注文を開いた場合、あなたはどのような方法でロットを分割することはできません - 最初に1、次に1、さらに1 - 注文は全体のロットを閉じ、すなわち、注文はそれが開かれたロットとクローズ、あなたは断片的に注文を閉じることができません...

"......注文をロットに分割することはできません..." - なぜ?技術的にはとっくに実装されており、P.85のRogerとKimIVのおかげで正規化ロット131のエラーは回避されました。また、「...1つの注文には1つのロット、3つのロットで注文を出すと、最初は1、次は1...と好きなように分割できない」という記述は誤りです。注文はロットと同様に、0.03、0.3、3...という数量で構成されています。で、0.01、0.1、1...と部分的に静かに閉じていきますよね?

 

そして、前回のリクエストのポイントは、配列に頼ることなく、標準的な計算を使用して、次のようにそれらを合計して、すべてのポジションを閉じることが可能である、ということです。

   BuyTotalOp=0;                                // Количество Buy ордеров
   SellTotalOp=0;                               // Количество Sell ордеров
   for (int i=1; i<=OrdersTotal(); i++)         // Цикл перебора ордер
      {
      if (OrderSelect( i-1, SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!= Symb)continue;      // Не наш фин. инструм
         if (OrderType()>1)                     // Попался отложенный
           {
            Alert("Обнаружен отложенный ордер. Эксперт не работает.");
            return;                             // Выход из start()
           }
         if (OrderType()==OP_BUY)
           {
            BuyTotalOp++;                         // Счётчик ордеров Buy

このまま進むべきか、それとも別の道を選ぶべきか、灯台を頼りに大海原を航海してきた疲れた船のような気分だ......」。

イゴール - 私たちは、あなたのブランチを無意味にゴミ箱に入れているのですか?

 

一度にすべてのペアを閉じることができますが、異なるペア、例.

1,2,1,2,2,1,2 総重複量 1-2-1+2+2+1+2=3 ロット

合計すると、我々は買い夏3ロットを取得し、このボリュームのカウンタを設定する3ロットを販売する

をクリックし、Close biを閉じます。

*

しかし、すべてのポジションをクローズすることは可能なのか、という質問に答える。

はい、可能です、次から次へと、スクリプトを使えばすぐです、aap!

スクリプト自体やクロージング機能は複数回公開されていますが...。

また、それらを設定することで、一度に閉じることも、条件ごとに閉じることもできます。

- 特定のシンボルによって

- 輸贏

- 損得勘定

それに伴い、基準の組み合わせも可能である...。

 

好き 条件で注文を締められるようにしてください、それだけではうまくいきません。

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

ファイル:
help.rar  7 kb
 

すべてをカバーします!!!

void CloseAll() 
{ 
   for (int i=OrdersTotal()-1; i>=0; i--) 
      { 
      if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES)==false) break; 
      if (OrderType()==OP_BUY      ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),100); 
      if (OrderType()==OP_SELL     ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),100); 
      if (OrderType()==OP_BUYSTOP  ) OrderDelete(OrderTicket()); 
      if (OrderType()==OP_SELLSTOP ) OrderDelete(OrderTicket()); 
      if (OrderType()==OP_BUYLIMIT ) OrderDelete(OrderTicket()); 
      if (OrderType()==OP_SELLLIMIT) OrderDelete(OrderTicket()); 
      }  
}

開いているポーズを閉じるだけです。

void CloseAll2() 
{ 
   for (int i=OrdersTotal()-1; i>=0; i--) 
      { 
      if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES)==false) break; 
      if (OrderType()==OP_BUY      ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),100); 
      if (OrderType()==OP_SELL     ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),100); 
      } 
}

コール例

// Скрипт. Закрыть все ордера.mq4 -----------------------------------
#include <WinUser32.mqh> 

void start() 
   { 
   if(MessageBox("Закрыть (удалить) все ордера?",
   "Скрипт", MB_YESNO| MB_ICONQUESTION)!= IDYES) return; 
   CloseAll(); 
   } 

スクリプトを完全に閉じる。

// Скрипт. Закрыть все.mq4 -----------------------------------
#property copyright "herurg@bk.ru" 
#include <WinUser32.mqh> 

void start() 
   { 
   if(MessageBox("Закрыть (удалить) все ордера?",
   "Скрипт", MB_YESNO| MB_ICONQUESTION)!= IDYES) return; 
   CloseAll(); 
   } 

void CloseAll() 
{ 
   for (int i=OrdersTotal()-1; i>=0; i--) 
      { 
      if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES)==false) break; 
      if (OrderType()==OP_BUY      ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),100); 
      if (OrderType()==OP_SELL     ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),100); 
      if (OrderType()==OP_BUYSTOP  ) OrderDelete(OrderTicket()); 
      if (OrderType()==OP_SELLSTOP ) OrderDelete(OrderTicket()); 
      if (OrderType()==OP_BUYLIMIT ) OrderDelete(OrderTicket()); 
      if (OrderType()==OP_SELLLIMIT) OrderDelete(OrderTicket()); 
      }  
}
 

キムさん最高です。脱帽です。

御社の機能をすべて勉強させていただきましたが、ひとつだけヒヤリとすることがあります。今、私が関数を書くときは脳から書くのですが、あなたの関数は私の頭の中にあります :-)。

私はプログラミングを始めた当初から、御社の多くの機能を研究してきました。

ありがとうございます。

 
gince >> :

好き 条件で注文を締めたいのに、どうしてもうまくいかないので助けてください。

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

説明

注文を閉じるための戦略は重要ではありません キムの関数を使って注文を閉じるのを手伝ってください


int start()
{
  //----
  //Print (ExpertName);
  if(Bars<20) return(0);
  if ( CheckNevBar)
  if (! NevBar()) return(0);
   
  TradesInThisSymbol = ExistPositions( sy);
  if( TradesInThisSymbol > 0) return(0);
   
  if(AccountFreeMargin() < MarginMin) 
  {
  //Print("Not enough money to trade Strategy:", ExpertName);
  return(0);
  }
  sy=Symbol();
  Lots = GetSizeLot( sy, LotsWayChoice, LotsPercent, LotsDeltaDepo, LotsDepoForOne, LotsMax);
   
   
  if ( CheckForOpen_Sell())
  OpenPosition( sy, OP_SELL, Lots);           // Тут  работает
  if ( CheckForOpen_Buy())
  OpenPosition( sy, OP_BUY, Lots);            // Тут  работает
  
  if( CheckForClose_Buy())
  ClosePositions( sy, OP_BUY);                 // Тут  у меня что то неработает
  if( CheckForClose_Sell())  
  ClosePositions( sy, OP_SELL);               // Тут  у меня что то неработает
  
  //----
  return(0);
}

//------------------------

bool CheckForClose_Buy()
  {
  Indicat_Var();
  if ( ExistPositions( sy, OP_BUY, MagicNumber))
  {
  if( VininI_fast_trend == -1)return(true);   // Тут любое условие на закрытие
  //if(BB_MACD_2 > 0)return(true);           // Тут любое условие на закрытие
  else
  return(false);
  }  
  }
//------------------------
bool CheckForClose_Sell()
  {
  Indicat_Var();
  if ( NumberOfPositions( sy, OP_SELL, MagicNumber) >0)
  {
  if( VininI_fast_trend == 1)return(true);         // Тут любое условие на закрытие
  //if(BB_MACD_1 > 0)                             // Тут любое условие на закрытие
  //return(true);
  else
  return(false);  
  }
  }
 
ここで何か動作していない、つまり閉じない。 エラーなし。