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

 
当然、その通りです。1本の小節に1回だけ読み取りを行うコードをすでに持っている、という意味合いです。
 
sllawa3:
その通りだと思います・・・私も疑問があります・・・

この方法を利用して、株式を監視し、指定された株式利益の割合に達した時点で、すべてのポジションを決済し、注文を削除することができます。

//--------------------------------------------------------------
// Описание глобальных переменных советника
// ----------------- Трал эквити -------------
extern double  PercentEquityForClose=15;
double         Equ_OLD,
               Equ_NEW,
               EquPerc,
               Equ_Start;

// ---- Дальнейшее описание глобальных переменных советника

//==========================================================

int init()                             // Функция init
{
   Equ_OLD=AccountEquity();
   Equ_Start=Equ_OLD; 
   EquPerc=Equ_Start/100*PercentEquityForClose;
   
// ---- Дальнейший код функции ----

   return;                             // Выход из init() 
}

//==========================================================
// ---- В функции слежения за событиями ----
// ---- вызываемой из функции start ----

   Equ_NEW=AccountEquity();                              // С новым тиком запоминаем текущее значение эквити
   if (Equ_OLD!=Equ_NEW)                                 // Если новое значение не равно старому, то
         {
            if (Equ_NEW>=Equ_OLD+EquPerc)                // Если эквити увеличилось по отношению к своему прошлому значению на EquPerc процентов,
               {                                         
                  ClosePosFirstProfit(NULL, -1, -1);     // то закрываем все позиции
                  DeleteOrders(NULL, -1, -1);            // и удаляем все ордера
                  Equ_NEW=AccountEquity();               // Запоминаем текущее значение эквити
                  Equ_OLD=Equ_NEW;                       // и заносим его в "прошлое" значение для проверки на изменение на след. тике
               }
         }

その場で書いたので、間違いがあるかもしれません。
各バーでのエクイティの変化を追跡するには、新しいバーの 開始をチェックし、もしそうなら、このコード断片を実行する必要があります。

   Equ_NEW=AccountEquity();                              // С новым тиком запоминаем текущее значение эквити
   if (Equ_OLD!=Equ_NEW)                                 // Если новое значение не равно старому, то
         {
            if (Equ_NEW>=Equ_OLD+EquPerc)                // Если эквити увеличилось по отношению к своему прошлому значению на EquPerc процентов,
               {                                         
                  ClosePosFirstProfit(NULL, -1, -1);     // то закрываем все позиции
                  DeleteOrders(NULL, -1, -1);            // и удаляем все ордера
                  Equ_NEW=AccountEquity();               // Запоминаем текущее значение эквити
                  Equ_OLD=Equ_NEW;                       // и заносим его в "прошлое" значение для проверки на изменение на след. тике
               }
         }

こんな感じでしょうか...。

 
Roger:
当然、その通りです。1つのバーにつき1回だけ読み取りを行うコードをすでに持っているという意味です。 。
いや、そうじゃなくて、上に書いたように、ティック ごとにエクイティをチェックするようにしたんだ。ただ、新しいバーのオープンのチェックを行い、もしそうなら、エクイティのチェックを行う...。難しいことではないと思うのですが...。
 
株式が上昇から下降に反転することに興味がある、ただし株式がバランスより上にある場合に限る... 何でもオープンにして閉じる...
 
sllawa3:
Equityがバランス以上であれば、Equityの増加から減少への反転に興味がある...開いているものを全て閉じるために...

以下は、新しいバーを定義するための関数です。

//+------------------------------------------------------------------+
//|  возвращает признак появления нового бара для указанного периода |
//+------------------------------------------------------------------+
bool isNewBar(int timeFrame)
   {
   bool res=false;
   
   // массив содержит время открытия текущего (нулевого) бара
   // по 7 (семь) таймфреймам
   static datetime _sTime[7];  
   int i=6;
 
   switch (timeFrame) 
      {
      case 1  : i=0; break;
      case 5  : i=2; break;
      case 15 : i=3; break;
      case 30 : i=4; break;
      case 60 : i=5; break;
      case 240: break;
      case 1440:break;
      default:  timeFrame = 1440;
      }
//----
   if (_sTime[i]==0 || _sTime[i]!=iTime(Symbol(),timeFrame,0))
      {
      _sTime[i] = iTime(Symbol(),timeFrame,0);
      res=true;
      }
      
//----
   return(res);   
   }
   

...エクイティがバランスより上にある限り、エクイティの上昇から下降への反転に興味がある...開いているものを閉じるために...。

そして、ティック ごとにエクイティをチェックする必要があります。結局、例えば次のエクイティチェックの1時間前にティックで作業してしまうと、エクイティの価値が下がってしまうかもしれない...。

そこで、1%ずつ増加するのではなく、Equ-OLD 変数に記録されている前のティックの状態とEqu_NEW
に記録されている現在の状態との相対的な増減を比較する必要があります。

 
sllawa3:
株式が上昇から下降に反転することに興味がある、ただし株式がバランスより上にある場合に限る...すべてのオープンを閉じるために...

こんなところにも。

   Equ_NEW=AccountEquity();                              // С новым тиком запоминаем текущее значение эквити
   if (Equ_OLD!=Equ_NEW)                                 // Если новое значение не равно старому, то
         {
            if (NormalizeDouble(Equ_NEW-Equ_OLD,8)<0)    // Если эквити уменьшилось по отношению к своему прошлому значению,
               {                                         
                  ClosePosFirstProfit(NULL, -1, -1);     // то закрываем все позиции
                  DeleteOrders(NULL, -1, -1);            // и удаляем все ордера.
                  Equ_NEW=AccountEquity();               // Запоминаем текущее значение эквити
                  Equ_OLD=Equ_NEW;                       // и заносим его в "прошлое" значение для проверки на изменение на след. тике
               }
         }

// (NormalizeDouble(Equ_NEW-Equ_OLD,8)<0) - возможно здесь нужно сравнивать не с нулём, а с каким-то числом, 
                                         // а то может в последующем и не дать увеличиться балансу, 
                                         // постоянно закрывая вновь открываемые позиции (они ведь требуют залога)

ただし、これはあくまで考えるための情報であり、レディメイドのコードではありません...。

 
drknn:

もちろんです。ただ、ストップと呼ばず、ペンディングオーダーと呼ばれる。ターミナルを開く。その中でF1キーを押す。表示されたウィンドウで、「コンテンツ」-「取引」-「注文の種類」を開きます。

))) ありがとうございます。しかし、資金が混乱した後、取引ではなく、入札と質問による慣れない執行、何かが混乱しているとき - 疑惑を取り除くために愚かな質問をすることを恥ずかしがらないでください。)))
 

ヘルプ . ディーラーには小数点以下が5つあります。iOpen(NULL,0,n) 関数は小数点以下が4つしかありません(読み取りは印刷で行われます) . 問題を解決するには .

 
pips500:

ディーラーに小数点以下5桁の数字がありますが、iOpen(NULL,0,n)関数では小数点以下4桁しか出ません(読み取りは印刷で行っています)どうすれば問題を解決できますか?

Print()は4桁に切り上げてコンソールに正しく出力するため、double型(この場合はiOpen() この場合、 小数点以下5 桁)、DoubleToStr() 関数を使用する必要があります。

string DoubleToStr(double value,int digits)
数値を、指定された精度での数値の文字表現を含むテキスト文字 列に変換する。

パラメータ

value - Величина с плавающей точкой.

digits - Формат точности, число цифр после десятичной точки (0-8).

 
sllawa3:
株式が残高の上にある限り、上昇から下降への株式反転に興味がある...すべてのオープンを閉じるために...

そして、その一例がこちら...。わざと新しいバーごとにポジションを開くようにしたのですが・・・。そこで、「OCキラー」ですが...。:)


リミッターがなく、1ティックごとにポジションを開くテスターレポートが同封されています - 巨大な割合で...そしてドローダウンなし :)このままでは誰も仕事をさせてくれないのが残念だ.

以下は、その報告書の写真です。


私はこの「レイド」で、ほとんどドローダウンもなく、たくさん儲けました。 テイクオーバーまで手が回らなかったくらいです(上の写真にあります)。


ファイル: