MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 220

 
danya-asg:

自分のエラーは理解できたが、それを解決する方法がわからない。タスクは正常に1秒ごとに開始されますが、現在のロウソクの開始からの時間が正しくカウントされません。

Seconds()関数は、最後に判明したティックのデータから秒数を出力 しますが、この関数を呼び出した 瞬間に分足ローソクのオープンからの実秒数を、たとえ最後の数秒間全くティックがなかったとしても、何とかしてカウントする必要があります。

タイムセコンド(TimeLocal())や ( TimeLocal() - Time[0]) でも動作しません ローカルタイムがサーバーと数秒異なることがあるからです。問題を解決するには?


OnTimer()が1秒ごとに実行 されていますね。

void OnTimer()
{
OnTick(); //-- старт каждую секунду
}
 
Alekseu Fedotov:


OnTimer()が1秒ごとに実行 されていますね。


しかし、正しいプログラムの動作のためには、サーバーの時刻を 1秒ごとに表示する必要があり、ここでは、次のティックが来たかどうかに依存しています。そうでない場合は、ontimerは起動しているが時間の遅れを示している、それが問題です。
 

今のところこれしか思いつきませんが、ちょっと曲者ですね。

int sek
void OnTick()
{
if(Seconds() > sek)
sek = Seconds ();
Clicker (); //-- старт каждый тик
}
void OnTimer()
{
sek = TimeSeconds(TimeLocal());
Clicker (); //-- старт каждую секунду
}

そのためには、10分ごとに時刻を同期させるようにパソコンを設定する必要があったんです。

 
danya-asg:

今のところこれしか思いつきませんが、ちょっと曲者ですね。

そして、そのためには、パソコンで10分ごとに時刻を同期させるように設定する必要がありました。


100〜200msのミリ秒タイマーを 作り、その中で全て動作させる必要があります。
秒が長すぎるし、よく滑る。

EventSetMillisecondTimer(200);
GetTickCount();
 

問題は、インジケータでフクロウを作り、エントリー後ローソク足2本をドラッグするストップを作り、もし取引が現在のトレンドに逆行したら、取引を終了して反転を開き、同じようにストップを反転させることです。エントリーポイント、エグジットポイントとして20と80を一定にする方法が全くわかりません。

ファイル:
f9h46khtl1.png  29 kb
 
novikov433:

問題は、インジケータでフクロウを作り、エントリー後ローソク足2本をドラッグするストップを作り、もし取引が現在のトレンドに逆行したら、取引を終了して反転を開き、同じようにストップを反転させることです。20と80をエントリーポイントとエグジットポイントとして一定にする方法が全くわからない。

許してくれ、酔っ払いのバカ...。でも、もしあなたが「このTSは失敗しない」と確信しているのなら、手動で20ドルを稼ぎ、フリーランサーにこのEAを注文することを止める理由は何でしょうか?断言するが、そこにいるまともな人のほとんどは、このTSを配布しないし、ましてやアドバイザーなんてどこにもいない...。
 
Alexey Viktorov:
すいません、酔っぱらいのバカです.でも、これだけは言っておきますが、もしあなたが「このTSは失敗しない」と確信しているのなら、手動で20ドルを稼ぎ、フリーランサーにこのEAを注文することを止める理由は何でしょうか?私はあなたを保証することができ、そこにまともな人々のほとんどは、このTSを配布することはありません、ましてやどこでも顧問...

EAの作り方を勉強したい。 もしかしたら、マーケットが変わって、アルゴリズムを少し変えるなど、もっとお金を払わなければならないかもしれない?

本当にフクロウのコンストラクタで作れるのかわかりませんが、それよりも、特定の場所にストップをかけるとか、特定の日に取引を注文するとか、基本的な機能を理解したいです。

なぜコンストラクタでも1,2,3などを作らなければならないのか、なぜこのような順序で矢印ですべてを接続しなければならないのかわかりません。 一般的に誰がmql4を勉強し、なぜそのようになるかを説明するために何もないインターネットの戦士のようなコースを作成しない、つまり、自分で新しい何かを作ることはありません、彼らのコードをコピーしなければなりません... ...。ピラミッド、ダイナミックロット、スマートストップはプロに任せて、私の仕事は、必要なフィルターをダウンロードして、トレンド形成の本質を理解することです。ご協力ありがとうございました。

 
novikov433:

EAの作り方を勉強したい。 もしかしたら、マーケットが変わって、アルゴリズムを少し変えるなど、もっとお金を払わなければならないかもしれない?

いくつかのフクロウのコンストラクタでTSを作る可能性については、特定の場所にストップをかけるとか、特定の日に取引を注文するといった基本的な機能を理解することが現実的なはずです。

ATCのためにTORを書くことは現実的であり、TORではすべての行がコメントされることを指定します - あなたは少し多くを支払うことになりますが、どのように、何が動作するかを見て、そして、徐々に作業コードに変更を加え、変化を見るでしょう - そう、自己訓練を開始します。
 
novikov433:...たいとするEAの作り方を理解する ...EAの作り方を理解したい・・・でもこのEAは損切り注文がブレークイーブンに移動 して、あとはトレンドが動くのを待つだけなので本当に負けてはいけない・・・と思い、すでに取り組んでいます・・・・。
novikov433 さんへ !トレーディングロボットの 象徴的な機能はご存知の通りですが、トレーディングロボットを書く際には注意が必要です!トレーディングロボットを書く際には注意が必要です。簡単な例で構いません。妻に、早朝に市場でバケツ一杯のジャガイモを買い、10時までに(ファンダメンタル分析)価格が上がる→売る、という注文(オーダー)を出すのです。でも、10時半にトラック一杯のジャガイモが届くこともあるんですよ(ニュース)。そして、(ニュースで)瞬時に価格が下がり、それがその日の終わりまで、あるいは1週間ずっと続くのです。ストップロスを設定している。10ルーブル下がったら、できるだけ早く(市場価格で)売る。損失を避けるために、どのように順序を変更するか。このバリアントが面白い場合 - 個人的なメッセージであなたの電子メールを書いてください。
 
こんにちは。テスターでのテスト時に1つのエラーが発生するので、対処方法を教えてください。テスト中、すべてのティックで、私のExpert Advisorは1番目のsellstop取引を開き、条件が通過しなかったので、それを削除しました。条件が成立していないにもかかわらず、2番目のセルストップが開閉される。その後、ログにbuy2をクローズしようとして、orderclose関数の チケットが不明であることが表示されます。作業中なのでコードを貼り付けていますが、不正確な箇所も出てくるかもしれません。受注ブロックは通常通り
Symb=Symbol();                               
   Total=0;                                     
   for(int i=1; i<=OrdersTotal(); i++)          
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) 
        {                                       
         if (OrderSymbol()!=Symb)continue;      
         if (OrderType()>1) continue;
         if (OrderType<=1)                     
            {
             Total++;                               
             if (Total>1)                           
               {
                Alert("Несколько рыночных ордеров. Эксперт не работает.");
                return;                             
               }
             Ticket=OrderTicket();                  
             Tip   =OrderType();                    
             Price =OrderOpenPrice();               
             SL    =OrderStopLoss();                
             TP    =OrderTakeProfit();              
             Lot   =OrderLots();                    
            }
        }

クロージングブロックもあまり問題視されていないようで、条件が簡素化されていることが示されています。

while(true)                                  
     {
      if (Tip==0 && Cls_B==true)                
        {                                       
         Alert("Попытка закрыть Buy ",Ticket);
         RefreshRates();                        
         Ans=OrderClose(Ticket,Lot,Bid,2);      
         if (Ans==true)                         
           {
            Alert ("Закрыт ордер Buy ",Ticket);
            break;                              
           }
         return;                                
        }
 
      if (Tip==1 && Cls_S==true)                
        {                                       
         Alert("Попытка закрыть Sell ",Ticket);
         RefreshRates();                        
         Ans=OrderClose(Ticket,Lot,Ask,2);      
         if (Ans==true)                         
           {
            Alert ("Закрыт ордер Sell ",Ticket);
            break;                              // Выход из цикла закр
           }
         return;                                // Выход из start()
        }
      break;                                    // Выход из while
     }

をお願いします。