エラー、バグ、質問 - ページ 308

 
aharata:
ヘルプのBarsCalculatedを読んでみてください。ちなみに、正しい例を示しています。

これでやってみよう。ありがとうございました。
 
Im_hungry:

つまり、CopyBuffer>0である限り計算し、新しいパラメータ(Close())

は、ポジションを閉じたときに表示されます。つまり、Whileをループさせる必要があるのです。こんなふうになるんです。

私なら、「CopyBuffer<0の 間は、この関数の呼び出しを繰り返す」と表現します。

While (vhandle>0) の行は、最初のCopyBuffer<0の場合はreturn(0); となるので、特に負荷はかからないようです。

私ならこの方向で作業します。

if(!PositionSelect(Symbol1) && !PositionSelect(Symbol2))
  {
   for(uchar u=0;u<100;u++)  //запускаем цикл с ограниченным количеством шагов
    {
     if(CopyBuffer(vhandle,0,0,50,Sp1Buffer) && CopyBuffer(vhandle,1,0,50,Sp2Buffer))
      {
       return(true);  //дождались копирования буферов - выходим
      }
     else
      {
       if(u==99) //т.е. выявляем последний шаг нашего цикла for, который не принёс ожидаемых результатов
         {
          Alert("Ошибка копирования буферов индикатора номер ошибки:",GetLastError());
          return(0);
         }
       Sleep(50);  //засыпаем ненадолго (хотя я сам не сторонник использования Sleep в теле OnTick)
      }
    }
  }

一般的には、このような内容で、作者の判断で。ご指摘の通り、リファレンスガイドがあっても損はないでしょう。

 
aharata:
BarsCalculatedのヘルプを読んでみてください。

紹介者作成に感謝 - 動作、問題ないようです(1ヶ月テスト済み)

以下は、1つ目のペアに対する私の作業コードです。

void OnTick()
{ 
   if (isNewBar()==true && proverkaHANDLA()==true)
     {
      if (!PositionSelect(Symbol1))
         {
          BSOpen();
         }
     }    
}
//+==================================================================+
bool proverkaHANDLA()
{
  ArraySetAsSeries(Sp1Buffer,true);
  ArraySetAsSeries(Sp2Buffer,true);
  vhandle=iCustom(NULL,0,"МТ5",Symbol1,100,Lots,1,Close());
  ResetLastError();
  int copied0=CopyBuffer(vhandle,0,0,50,Sp1Buffer);
  int copied1=CopyBuffer(vhandle,1,0,50,Sp2Buffer);
  if(copied0<=0 || copied1<=0)
     {
      Sleep(50);
      for(int i=0;i<100;i++)
        {
         if(BarsCalculated(vhandle)>0)
         break;
         Sleep(50);
        }
      copied0=CopyBuffer(vhandle,0,0,50,Sp1Buffer);
      copied1=CopyBuffer(vhandle,1,0,50,Sp2Buffer);
      if(copied0<=0 || copied1<=0)
        {
         Print("Не удалось скопировать Буфера индюков :-)",GetLastError(),
         "copied0",copied0,"copied1=",copied1);
         return (false); 
        }
       Print("Удалось скопировать Буфера :-)copied0",copied0,"copied1=",copied1);
       return (true);
     }
   Print("Удалось скопировать Буфера. Sp1Buffer=",ArraySize(Sp1Buffer),
         "Sp2Buffer=",ArraySize(Sp2Buffer));
   return (true);
}
 
Yedelkin:

私なら、「CopyBuffer<0である限り、この関数を繰り返し呼び出す」と言うでしょう。

While (vhandle>0) の行は、最初のCopyBuffer<0の場合、return(0)になるので、あまり負荷がかかっていないようです。

私なら、この方向で仕事をします。

基本的には、作者の裁量でそんな感じ。正しく指摘されているように、参考書があっても損はないでしょう。

もっと単純に、この2つのアプローチのうち、どちらが優れていて、どちらが速いか、それを見てみようということです。

皆さん、ありがとうございました!では、テストに行きましょう。

 
開発者の皆さん、アプリケーション#33601に注目してください(異なるOSでの活用について「素晴らしい機能」があります)...。
 
Interesting:
開発者の皆さん、リクエスト#33601に注目してください(異なるOSでの活用に関する「素晴らしい機能」があります)...。

もしかしたら、もともと 別のブローカーからインストールさ れた端末を使用しているのでは?アプリケーションに詳細を追加してください。
 
Rosh:
もしかしたら、もともと 別のブローカーからインストールさ れた端末を使用しているのでは?アプリケーションに詳細を追加してください。
端子について、最終的に何を手に入れればいいのかが明確になった。
 

開発者の方に質問です。

スプレッドについては、バーで保存され、テスターは(履歴が正常にロードされていれば)変化するスプレッドを考慮しながら履歴全体を実行することができるので、すべてが明確です。

つまり、ブローカー/ディーラーがスワップや手数料のレートを変更した場合、どうなるのか?

ちょっと不条理な状況であることは理解できますが、それでも。

もし私が正しく理解していれば、MT4のテスターはスワップと手数料を最後に取りますが・・・。

追記

スクリーンショット付きで再度明確化...。

 
Interesting:

開発者の方に質問です。

スプレッドについては、バーで保存され、テスターは(履歴が正常にロードされていれば)変化するスプレッドを考慮しながら履歴全体を実行することができるので、すべてが明確です。

つまり、ブローカー/ディーラーがスワップや手数料の大きさを変更した場合はどうなるのか、ということです。

スワップやコミッションの履歴は保存されず、これらの設定は最後の接続から取得されます
 
Rosh:
スワップやコミッションの履歴は保存されず、これらの設定は最後の接続から取得される
なるほど、そういうことだったんですね。頻繁に・全く変わらないことを祈ろう。