アドバイザーの書き方を勉強中...。 - ページ 7

 

また、3つの基準で足の状態を正しく確認できているか?

  //проверяем если есть поза, стоит стоп и не стоит БУ        
       if ((OrdersTotal()>0)&& (OrderStopLoss()!=0) && (OrderStopLoss()!= SLBU))
            ModifySLinBU();   //передаем управление в ф-ю установки БУ

それとも

  //проверяем если есть поза, стоит стоп и не стоит БУ        
       if ((OrdersTotal()>0)&& (OrderStopLoss()!=0 && SLBU))
            ModifySLinBU();   //передаем управление в ф-ю установки БУ
 

このフォーラムで「ピリオドシフト」という言葉を聞いたことがありますか?

説明しよう。例えば、H4ローソク足は、すべての証券会社で異なっている、それは明らかである - サーバーの時間が異なっているため。最大、最小、開、閉など、出力で他の特性を得るために、時間に応じてこれらの燭台をシフトする方法...

これは何のためにあるのでしょうか?私の証券会社ではローソク足が同じで、Expert Advisorで実装したストラテジーは動作しますが、チャートのミスマッチのエラーが多発しています。(私が理解する限り、これは私の証券会社の問題であり、フォーラム参加者の分析中には歓迎されません!)

しかし、MetaQuotesの履歴をダウンロードしてもエラーは出ないのですが、目視テストでも ローソク足があまりシグナルを出さず、それを使ったEAテストでは悪い結果が出てしまいます。

そこで、自分の証券会社や別の証券会社に合わせてローソク足を「ずらす」ことを考えるようになったのです。

 

DCのエラーを減らし、モデリング品質を向上させる方法とは?



ユーロ/0.1-10ロット/1年/300-322000

 

注文の変更処理が正しく行われているかどうかを確認する?ここで考えられる落とし穴は何でしょうか?

//+------------------------------------------------------------------+
//| Открытие позиции на покупку
//+------------------------------------------------------------------+
void OpenBuy() 
  { 
   RefreshRates();
      if ((OrdersTotal()==0) && (Ask == Enter)) //бъем до упора эту цену
         {
            if (IsTradeContextBusy()==false)
               {
                  OrderSend(Symbol(), OP_BUY, Lot, Enter, Slippage, 0, 0, 0, MAGIC,0, clOpenBuy);
                  if (OrdersTotal()>0)
                     {
                        Modify = false;                              //флаг установки SL и TP - не установлен
                        ModifySL();                        
                     }
                  else Print("Ошибка установки ордера BAY по цене ",OrderOpenPrice()," код ошибки ="+GetLastError());
               }  
         }              
      if ( UseSound) PlaySound( NameFileSound);
  } 
//+------------------------------------------------------------------+
//| Открытие позиции на продажу
//+------------------------------------------------------------------+
void OpenSell() 
  { 
   RefreshRates();
      if ((OrdersTotal()==0)&&(Bid == Enter))  //бъем до упора эту цену
         { 
            if (IsTradeContextBusy()==false)
               {
                  OrderSend(Symbol(), OP_SELL, Lot, Enter, Slippage, 0, 0, 0, MAGIC,0, clOpenSell);
                  if (OrdersTotal()>0)
                     {
                        Modify = false;                              //флаг установки SL и TP - не установлен
                        ModifySL();
                     }   
                  else Print("Ошибка установки ордера SELL по цене ",OrderOpenPrice()," код ошибки ="+GetLastError());
               }
         }
      if ( UseSound) PlaySound( NameFileSound);        
  } 
//+------------------------------------------------------------------+
//| Модификация ордера на установку SL и TP                                                                 |
//+------------------------------------------------------------------+
void ModifySL()
   {
      if (OrderSelect(0, SELECT_BY_POS)==true) // Если есть открытый ордер
         {       
            if (OrderType()==OP_BUY)
               {
                  StopL = SLB(); 
                  TakeP = TPB();
                  Modify = OrderModify(OrderTicket(),OrderOpenPrice(), StopL, TakeP,0,Red);
                  if ( Modify == false) Print("Ошибка изменения ордера #",OrderTicket(), " при попытке установить СТОП ", StopL,". Текущая цена- ",Bid,", код ошибки ="+GetLastError());
               }
            else
               {
                  StopL = SLS(); 
                  TakeP = TPS();
                  Modify = OrderModify(OrderTicket(),OrderOpenPrice(), StopL, TakeP,0,Red);
                  if ( Modify == false) Print("Ошибка изменения ордера #",OrderTicket(), " при попытке установить СТОП ", StopL,". Текущая цена- ",Ask,", код ошибки ="+GetLastError());
               }
         }     
   }

次にint Start()で変更の有無をチェック...

//+------------------------------------------------------------------+
//| Проверка открытого оредра на установку SL,TP и установка SL,TP
//+------------------------------------------------------------------+
    if ((OrdersTotal()>0) && ( Modify == false)) ModifySL();  //SL и TP - не установлен
 

ご協力いただいた方、ありがとうございました!)

現在、異なるシンボルで同時にEAを実行する方法を学んでいるところです...。

このバリアントは、EAが実行されているシンボルに属する注文を 見つけるのに適しているかどうか教えてください。

for (int i=1; i<=OrdersTotal(); i++)          //Цикл по всем ордерам,..
  {                                           //отражённым в терминале
      if(OrderSelect( i-1, SELECT_BY_POS)==true)//Если есть следующий         
        {
          if(OrderSymbol()==Symbol())
            {
              if (OrderType()==OP_BUY)
               {
                 ... 
               }  
              else
               {
                 ...
               }

            }
        } 
  }                                         //Конец тела цикла