[アーカイブ!】どんなルーキーの質問でも、フォーラムを散らかさないように。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 2. - ページ 56

 
Sergstuddek:


(授業はいいが、まだ問題がある)))

理論的には理解できるのですが、実際にはうまくいきません。私のコードを見て、何が問題なのか教えてください。

非常にシンプルなEAであることは理解していますが、私は旅を始めたばかりです))))そしてすでに問題があります。

// Expert Advisorの本質は、まず最初の買い注文を開くことです。
// その後、2方向にストップをかける
// かたほう
// チャート反転の場合はさらに2回、反対側で行う
アドバイザーが最後に開いた注文に関連して、 // ストップが配置されます。
// 新しい保留注文が開始されるたびに、それまでの注文はすべて削除されます。
// と新しい保留中のストップは、新しいオープンオーダーに対してすでにオープンしています。


ストップは、ストップオーダー(テイクプロフィット、ストップロス)とストップオーダー(バイストップ、セルストップ)の2つで理解することができます。ここでいう「ストップ」の意味は、おそらくあなたにしかわからないと思います。用語は正確にお願いします。コンピュータには的確な指示を与えなければならない。また、記述はできる限り正確に行う必要があります。
 
drknn:
ストップは、逆指値注文(テイクプロフィット、ストップロス)と逆指値注文(バイストップ、セルストップ)の2つの意味で理解することができます。ここでいう「ストップ」の意味は、おそらくあなたにしかわからないと思います。用語は正確にお願いします。コンピュータに的確な指示を与える必要があります。また、記述はできる限り正確に行う必要があります。

不正確な表現で申し訳ないのですが、ストップオーダーは逆指値注文(Buy StopとSell Stop)
 
Sergstuddek:

不正確な表現で申し訳ありません。ストップオーダー(Buy StopとSell Stop)のことです。
void DeleteStopOrders()
{
  int res;
  for(int i=0;i<OrdersTotal();i++)
  {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
    if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
    {
      if(OrderType()==OP_SELLSTOP)
        res=OrderDelete(OrderTicket());
      if(OrderType()==OP_BUYSTOP)
        res=OrderDelete(OrderTicket());
     }
  }
}


本機能の表記に誤りがあります。注文は、注文一覧の最後から順に検索する必要があります。この方法では、注文が削除された後、注文リストがその位置だけ移動するため、1つの注文がスキップされることになります。ループは以下のように構成する。

for (int i=OrdersTotal()-1;i>=0;i--){

さらに、注文が選択されない場合、ブレークをする必要はなく、サイクルを終了する必要はなく、注文が選択されない理由を見つける必要があります。それは次の通りです。

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {
  Print("При выборе ордера № ",i," произошла ошибка № ",GetLastError());

res=OrderDelete(OrderTicket()); - これも十分に正しいとは言えません。OrderDelete()関数は、boolean 型である。そして、注文を削除する命令を出すとともに、注文を削除できない場合の対処も必要です。つまり、次のようなことです。

res=OrderDelete(OrderTicket());
if(!res){
  Print("Ордер № ",OrderTicket()," удалить не получилось - ошибка № ",GetLastError());
}

残りは後で見ます。

 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
  if (CalculateCurrentOrders1(Symbol())==0)
   OpenBuy();
  if (CalculateCurrentOrders2(Symbol())<=1)
  DeleteStopOrders();
  if (CalculateCurrentOrders2(Symbol())<=1)
   OpenStops();
//----
   return(0);
}

スタートファンクションコードが正しく記述されていない。

最初の機能では、買い注文と売り注文を足し算します。買い注文と売り注文を別々にカウントする必要があります。ここがポイントです。市場に1件の買い注文がある場合、買いストップはより大きなロットで設定する必要があります。そうだろ?また、マーケットに売り注文がある場合は、buystopは通常のロットで、sell stopはより大きなロットで設定する必要があります。では、一つの関数で買い注文と売り注文の両方を合計した場合、どの注文がマーケットで開いているかをどのように検出するのでしょうか。これらの事実を踏まえて、コードを書き換えてみてください。

 

ブローカーから履歴を自動的にダウンロードする方法を教えてください。家を1時間押すのはちょっと不便です。

 
_dude_:

ブローカーから履歴を自動的にダウンロードする方法を教えてください。家を1時間押すのはちょっと不便です。

Vadim Junkoにお任せしました。履歴を読み込むためのスクリプト です。ベース(スクリプトセクション)には、さらにいくつかのものがあります。
 
gince:

インジケーターについての質問です。

インジケーターは、クロスインジケーターです。一方に多くの矢印を引き寄せ、もう一方に多くの矢印を引き寄せる。最初に描かれるものだけを作る方法。コードに書かれている方法で試したのですが、Frameを切り替えると矢印が変わってしまうのです。

正しい方法をアドバイスしてください。


インジケーターを見てみないとわからないですね。もしかしたら、解決策があるかもしれない
 
nemo811:
Expert Advisorを修正したいのですが、どうすればよいですか?インストールされているチャート上の通貨ペアの注文(ユーザーが所有し、開いたもの)で動作するようにする必要があります。損益確定時点のことを指します。現在のバージョンでは、条件(入金%のキャッチ)が発生すると、全通貨ペアで全ポジションを(MAGIC=0で)決済しようとするので、必要ない。すべての通貨ペアを完全に区切る必要があります。ありがとうございました。

違う掲示板でも同じことをしないといけない。これはスパムで、BANされるかもしれない。
 
Vinin:

また、違うスレッドに同じことを書くとスパムで、BANされることがあります

申し訳ありません。)
 

ご理解とご協力をお願いいたします ))

自分で解決することができた。

トリッキーな行を挿入 if(OrderSymbol()!=SMB || OrderMagicNumber()!=MAGIC) continue;

を、同じようにトリッキーな場所へ。その後、すべて意図したとおりに動作するようになりました。

マジシャンとの情報交換ありがとうございました。私はプログラマーではないので、時々、知識不足で何かを考えているわけではありません。