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

 
ALex2008 >> :

じっくりとスレッドを読んでみてください

私はそこで、オプションについて書いています。

ブローカーが再見積もりを出しても ...


エラーコード138と実アカウント

 

このオプションがOrderModifyを意味するのであれば

YuraZ писал(а) >>

допустим

получен сигнал -

на тике бъем на вход раз 5

не пробили! вышли

на втором тике после сигнала входим и долбим далше!

...となると、まだダニまで育っていないのですが)))1stティック、2ndティックをどのように計上するのか?

Sleep(2000); // エラー発生後、2秒間の待機です。

そして、新しいティックをいつまで待つのか?


 
Talex >> :
こんな風に試してみてください。

私は今、OpenSendの直後にOrderModifyでストップを設定し、このストップが存在するかどうかをチェックする作業を行っています。

うまくいかなかった場合はもうトレースしないで、うまくいかなかった場合は何がエラーなのか、そしてput...put...と試してみてください)。

RefreshRates();   
           double SLS = Ask+ Stop*Point;   //стоп на продажу
           Modify = OrderModify(OrderTicket(),OrderOpenPrice(), SLS,OrderTakeProfit(),0,Red);
              if ( Modify == false)
                  {
                      Print("Ошибка при попытке установить стоп для SEL, код ошибки ="+GetLastError());
                      for (int j=0 ;; j++) //пытаемся пока ДЦ не умрет)
                             {
                                SLS = SLS+ j*Point;   //увеличиваем стоп на 1 пп 
                                RefreshRates();
                                Modify = OrderModify(OrderTicket(),OrderOpenPrice(), SLS,OrderTakeProfit(),0,Red);
                                   if ( Modify==true)
                                       break;
                                   else   
                                       Print("Ошибка при попытке установить стоп для SEL, код ошибки ="+GetLastError());        
                              }
                  }
 
OrderModifyの ステータスを確認する方法を教えてください。修正に成功した後、再度修正を試みて不必要なエラーが発生することがないようにするためです。
 
bool ModifyS = OrderModify(OrderTicket(),OrderOpenPrice(), SLS,OrderTakeProfit(),0,Red);
if ( ModifyS==true) continue;

に置き換えてください。

ModifyS = OrderModify(OrderTicket(),OrderOpenPrice(), SLS,OrderTakeProfit(),0,Red);
if ( ModifyS==true) break;

をご覧ください。

1. なぜ不必要に変数の型を定義するのか - これはコンパイル時に表示されるはずのエラーです。

2. continue の代わりに - 新しい反復に移行する (すなわち、修正する新しい試みに移行する)、 break を使用 - ループから抜ける (そして無限、これは良くない)。

 
Xupypr >> :

1.なぜ不必要に変数の型を定義するのか - これはコンパイル時にポップアップするはずのエラーです。

一定)

2.新しい反復処理(つまり、新しい修正の試み)にジャンプするcontinue - iterationの代わりに、break - exit from the loopを使用します。

>> ありがとうございました

...しかもエンドレス、これはマズイ...。

止める必要があるから無限大に...。

また、何度かトライして何らかの理由で拒否され、その間に価格がポジションに対して大きく動いてしまったら...。では、どうすればいいのか?

 

ログにエラーが表示される。

open #1 sell 0.01 EURUSD ok
modify #1 sell 0.01 EURUSD ok
Error trying to set stop for SEL, error code =0
Stop loss#1
open #2 sell 0.01 EURUSD ok
modify #2 sell 0.01 EURUSD ok
Error trying to set stop for SEL, error code =0
Stop loss #2
open #3 sell 0.01 EURUSD ok
modify #3 sell 0.01 EURUSD ok
Error trying to set stop for SEL, error code =0

売りに出す

RefreshRates();
      if ((OrdersTotal()==0)&&(Bid == Enter))  //бъем до упора эту цену
         { 
            if (IsTradeContextBusy()==false)
               {
                  OrderSend(Symbol(), OP_SELL, Lot, Enter, Slippage, 0, ldTake, lsComm, MAGIC,0, clOpenSell);
                  if (OrdersTotal()>0)
                     {
                        ModifySL();                   //ставим стоп
                        SLBU = OrderOpenPrice()- BU;               //цена БУ
                     }   
                  else Print("Ошибка при попытке установить ордер на SELL, ",OrderOpenPrice()," код ошибки ="+GetLastError());             
               }
         }




モディファイ・セル





void ModifySL() 
   {
      if (OrderSelect(0, SELECT_BY_POS)==true) // Если есть открытый ордер
         {       
            if (OrderType()==OP_BUY)
               {
                  RefreshRates();
                  OrderModify(OrderTicket(),OrderOpenPrice(),Bid- StopL*Point,OrderTakeProfit(),0,Red);
                  if (OrderStopLoss()==0) Print("Ошибка при попытке установить стоп для BUY, ",OrderStopLoss()," код ошибки ="+GetLastError());

               }
                               
            else
                  RefreshRates();   
                  OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ StopL*Point,OrderTakeProfit(),0,Red);
                  if (OrderStopLoss()== 0) Print("Ошибка при попытке установить стоп для SEL, ",OrderStopLoss()," код ошибки ="+GetLastError());
               }
         } 
   }




 
ALex2008 >> :

このオプションのことで、OrderModifyを指している場合

...となると、まだダニまで育っていないのですが)))1stティック、2ndティックをどのように計上するのか?

Sleep(2000); // エラー発生後、2秒間待機します。

また、新しいダニが発生するまでの期間は?


刻々と

という

START()

{

}

---

START機能で長時間待機した場合の注意点

ダニを見落とすかもしれない

例:START機能を入力し、10分経過した場合、ティックが来るのは当然だが、それをキャッチすることができない

夜間はダニがいないこともありますが

---

そのため、START機能で長時間座っていると、ダニの捕獲に悪影響があります(もし、ダニが重要であれば)。

エコノミープログラムを最小限のサイクルとディレイで書く

---

 
YuraZ >> :

...注意点としては、START機能を長く使っていると

一寸先は闇

例:START機能を入力し、10分経過した場合、ティックが来るのは当然だが、それをキャッチすることはできない

夜中にダニが発生することはまずないものの

---

そのため、START機能で長時間座っていると、ダニの捕獲に悪影響があります(もし、ダニが重要であれば)。

サイクルやディレイを最小限に抑えたエコノミープログラムを書く。

---

注文の変更や設定の前にRefreshRates()関数を使用すると、Start()の外側の状態、つまりティックを更新するだけ?

正しく理解できていますか?

 

ここで、オープニングの最終版とポーズの修正を行い、講評とします。

このオプションの「+」と「-」は?

売り出し

RefreshRates();
      if ((OrdersTotal()==0)&&(Bid == Enter))  //бъем до упора эту цену
         { 
            if (IsTradeContextBusy()==false)
               {
                  OrderSend(Symbol(), OP_SELL, Lot, Enter, Slippage, 0, ldTake, lsComm, MAGIC,0, clOpenSell);
                  if (OrdersTotal()>0)
                     {
                        ModifySL();                   //ставим стоп
                        SLBU = OrderOpenPrice()- BU;               //цена БУ
                     }   
                  else Print("Ошибка при попытке установить ордер на SELL, ",OrderOpenPrice()," код ошибки ="+GetLastError());             
               }
         }




ストップモディファイ





void ModifySL()
   {
      if (OrderSelect(0, SELECT_BY_POS)==true) // Если есть открытый ордер
         {       
            if (OrderType()==OP_BUY)
               {
                  RefreshRates();
                  bool Modify = OrderModify(OrderTicket(),OrderOpenPrice(),Bid- StopL*Point,OrderTakeProfit(),0,Red);
                  if ( Modify == false) Print("Ошибка при попытке установить стоп для BUY, ",OrderStopLoss()," код ошибки ="+GetLastError());

               }
            else
               {
                  RefreshRates();   
                  Modify = OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ StopL*Point,OrderTakeProfit(),0,Red);
                  if ( Modify == false) Print("Ошибка при попытке установить стоп для SEL, ",OrderStopLoss()," код ошибки ="+GetLastError());
               }
         }     
   }