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

 
artmedia70:

IMHO - 注文を見つけ、それがマーケットにあるかクローズしたか、そしてどのようにクローズしたか、テイク、ストップ、マニュアルで確認するのがよいでしょう。ここから、いろいろな方向に踊り出すことができます。

そうすれば、すべてが正確になります。しかし、グローバル変数は失われてしまうことも...。


変数をなくすとはどういう意味ですか? EAがこれもチェックするように見つけるということですか?
 
Begemot7:
変数を失うとはどういう意味ですか? EAがそれをチェックするように、それも見つけるという意味ですか? 。

リアルとデモのすべてのEAで、注文とポジションに関する重要なデータを変数に保存していません。EAのロジックに必要なデータは、注文コメントに書くのが限界です。ポジションの有無、数、注文の有無、クローズしたポジション、クローズ方法を調べる必要があるときは、マーケットのポジションや注文、ヒストリカルデータをループさせて、必要な注文を探し、必要な情報を取得することにしています。したがって、予期せぬコンピュータのシャットダウン時に失われる可能性があるため、重要な情報はすべて変数に保存しないようにしています。後からいつでも取り出せる。端末のグローバル変数 に保存しようとしたのですが、コンピュータがクラッシュ/ハングアップしたときに、情報が常にそこに保存されるわけではないことが判明しました。それに、常に新鮮な情報を書き込むことを監督するのは、私にとっては面倒なことです...。必要なものを必要な時に探しやすいと思います。
 
PapaYozh:

インジケータをドロップしたポイントの座標は、関数を使って取得できます。

WindowXOnDropped()

WindowYOnDropped()

価格と時間

WindowPriceOnDropped()

WindowTimeOnDropped()


組み込んでみます。例としては、以下のようなものです。
 

私は奇妙な状況に直面しています。教えてください...

自作EAは3つあります。戦略は同じで、楽器によって実装が異なるだけです。ペア:EURUSD、EURGBP、USDJPY。前の2つとはうまくいっているのですが、最後の1つはうまくいっていません。ブローカーはFX-Trendです。私の口座は最小ロット0.01のミニ口座です(これまでテストに使用していました)。

同時に:デモ口座ではすべてOKです。テスターで実行すると、テスターの同じリアル口座で トレードが開始されます。しかし、実際の取引時にはそうではない。注文開始のチャートマーカー(および他のすべてのマーカー)が正常に配置される。過去ログにはまったく何もない。

すべてVPSで動いています。


これだけの情報だと思います。どの方向に掘ればいいのか、ヒントがあればありがたいです。

 
Sepulca:

このような方が良い(EAを再起動した場合に備えて)。



注文が1つだけなら、なくても大丈夫です。


if(OrdersTotal()<1))

{

}

......

 
artmedia70:
私はリアルとデモのすべてのEAで、注文やポジションに関する重要なデータを変数に保存していません。EAロジックに必要なデータは、注文コメントで書くのが限界です。ポジションの有無、数、注文の有無、クローズしたポジション、クローズ方法を調べる必要があるときは、マーケットのポジションや注文、ヒストリカルデータをループさせて、必要な注文を探し、必要な情報を取得することにしています。この方法では、予期せぬコンピュータのシャットダウン時に失われる可能性があるため、重要な情報をすべて変数に保存しないようにしています。後からいつでも取り出せる。端末のグローバル変数に保存しようとしたのですが、コンピュータがクラッシュ/ハングアップしたときに、情報が常にそこに保存されるわけではないことが判明しました。それに、常に新鮮な情報を書き込むことを監督するのは、私にとっては面倒なことです...。必要なものを必要な時に探しやすいと思います。

そうなんです...。...さらに安心できるように。もちろん、すべてのオーダーに目を通す方が正しいのですが。しかし、これは具体的なケースです。GlobalVariablesを失ったのであれば、この証券会社から離れるべきだ。GlobalVariablesは、お客様のパソコンではなく、証券会社でそのままにしておくと最大3ヶ月間保存されます。それとも私が間違っているのでしょうか?
 
自分でも分かったような気がします :).その通りです。要は、それを形にすることです。一般に、市場で執行する 場合、ストップとテイクポジションをゼロに設定します。そして、それをきちんとセットする。もしかしたら、誰かが役に立つかもしれない...。
 
Sepulca:
そうなんです...。安心感を与える。もちろん、正しいのは、すべての注文に目を通すことです。しかし、これは具体的なケースです。そして、GlobalVariablesがなくなれば、この証券会社から離れるべきでしょう。

どういうことですか~この証券会社はわざとやっているのですか?MT4はブローカーに簡単に操作される端末なので、不正が多いのではと言われたのですが、聞いたことのある方はいらっしゃいますか?
 
Begemot7:

つまり、DCはわざとやっているのでしょうか?MT4はブローカーに簡単にコントロールされるターミナルで、それ故に多くの不正行為が可能だと聞いたのですが、どなたかご存知でしょうか?


よくわからないんです。DCがグローバル変数を破壊するのは、もちろん、X......束を構築していない限り、何の意味があるのでしょう。ドキュメントから引用します。
「クライアントターミナルのグローバル変数とMQL4プログラムのグローバルスコープで宣言された変数を混在させないでください。 グローバル変数は最後のアクセスから4週間はクライアントターミナルに存在しますが、その後は自動的に削除されます。グローバル変数へのアクセスは、新しい値を設定するだけでなく、グローバル変数の値を 読み出すこともできます。クライアントターミナルのグローバル変数は、クライアントターミナルで起動したすべてのMQL4プログラムから同時にアクセスすることができます。0.01や0.1のロットで仕事をしていても、誰も虐げたりしない、些細なことだから...」と。しかし、リアル口座で100ロット開設した場合、資金を奪い合う覚悟が必要だ。

 

プロに助けてほしい!!!すでにこのコードで頭を悩ませています...。4つのバッファがあり、そのうち2つは正しく動作しますが(Buffer &buffer2)、残りの2つは正しく動作しません。ある条件が発生するとバッファが満たされ、この値が1つ上、2つ下となるとバッファは削除(ゼロ化)されますが、残りの2つのバッファはチャートにぶら下がったままとなります。修正方法を教えてください。

      //--- Функция расчета буферов CountZZ(BuferUp,BuferDn,iPeriod,Dev,Step);
int CountZZ( double& ExtMapBuffer[], double& ExtMapBuffer1[], double& ExtMapBuffer2[], double& ExtMapBuffer3[], int ExtDepth, int ExtDeviation, int ExtBackstep )
{
   int    shift, back,lasthighpos,lastlowpos;
   double val,res;
   double curlow,curhigh,lasthigh,lastlow,lastlow1,lasthigh1;
   int count = iBars(pair,tf)-ExtDepth;

   for(shift=count; shift>=0; shift--)
     {
     //--- Расчитываем буфер BuferUp
      val = iLow(pair,tf,iLowest(pair,tf,MODE_LOW,ExtDepth,shift));
      if(val==lastlow) val=0.0;
      else
        {
         lastlow=val;
         if((iLow(pair,tf,shift)-val)>(ExtDeviation*Point)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer[shift+back];
               if((res!=0)&&(res>val)) ExtMapBuffer[shift+back]=0.0;
              }
           }
        }
       
          ExtMapBuffer[shift]=val;
      //--------------------------------------------------------------------    
          
     //--- Расчитываем буфер BuferUp2
      if (ExtMapBuffer[shift]>0.0)
      {
             if(use.narrow.bands) val = MathMin(iClose(pair,tf,shift),iOpen(pair,tf,shift));
                else {val = MathMax(iClose(pair,tf,shift),iOpen(pair,tf,shift));
             val = MathMin(val,MathMin(iHigh(pair,tf,shift+1),iHigh(pair,tf,shift-1)));}
      if(ExtMapBuffer[shift+back]==0.0) ExtMapBuffer1[shift+back]=0.0;
      } 
          ExtMapBuffer1[shift]=val;
      //--------------------------------------------------------------------    
          
      //--- Расчитываем буфер BuferDn
      val=iHigh(pair,tf,iHighest(pair,tf,MODE_HIGH,ExtDepth,shift));
     
      if(val==lasthigh) val=0.0;
      else
        {
         lasthigh=val;
         if((val-iHigh(pair,tf,shift))>(ExtDeviation*Point)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer2[shift+back];
               if((res!=0)&&(res<val)) ExtMapBuffer2[shift+back]=0.0;
              }
           }
        }
      ExtMapBuffer2[shift]=val;
      //-------------------------------------------------------------------
      
      //--- Расчитываем буфер BuferDn2
      if (ExtMapBuffer2[shift]>0.0)
      {
             if(use.narrow.bands) val = MathMax(iClose(pair,tf,shift),iOpen(pair,tf,shift));
                else {val = MathMin(iClose(pair,tf,shift),iOpen(pair,tf,shift));
             val = MathMax(val,MathMax(iLow(pair,tf,shift-1),iLow(pair,tf,shift+1)));}
      if(ExtMapBuffer2[shift+back]==0.0) ExtMapBuffer3[shift+back]=0.0;
      }
      ExtMapBuffer3[shift]=val;
      //-------------------------------------------------------------------
      
     }
           
   // Отсееваем ненужные значения
   lasthigh=-1; lasthighpos=-1;
   lastlow=-1;  lastlowpos=-1;

   for(shift=count; shift>=0; shift--)
     {
      curlow=ExtMapBuffer[shift];
      curhigh=ExtMapBuffer2[shift];
      if((curlow==0)&&(curhigh==0)) continue;
      //---
      if(curhigh!=0)
        {
         if(lasthigh>0)
           {
            if(lasthigh<curhigh) ExtMapBuffer2[lasthighpos]=0;
            else ExtMapBuffer2[shift]=0;
           }
         //---
         if(lasthigh<curhigh || lasthigh<0)
           {
            lasthigh=curhigh;
            lasthighpos=shift;
           }
         lastlow=-1;
        }
      //----
      if(curlow!=0)
        {
         if(lastlow>0)
           {
            if(lastlow>curlow) ExtMapBuffer[lastlowpos]=0;
            else ExtMapBuffer[shift]=0;
           }
         //---
         if((curlow<lastlow)||(lastlow<0))
           {
            lastlow=curlow;
            lastlowpos=shift;
           }
         lasthigh=-1;
        }
     }
 
   for(shift=iBars(pair,tf)-1; shift>=0; shift--)
   {
      if(shift>=count) ExtMapBuffer[shift]=0.0;
         else
         {
            res=ExtMapBuffer2[shift];
            if(res!=0.0) ExtMapBuffer2[shift]=res;
         }
   }
}