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

 
Rewerpool:

なぜそのような書き方をするのか?

1つのシンボルにしかEAを設置しないのに、すべてのシンボルで動作するのですか?そして、マジシャンは自分自身を見ることになるのです

混乱してるんだ!

旧mql4では、条件リストの先頭をチェックした結果に関係なく、最初から最後まで条件をチェックしました。それゆえ、処理時間を短縮したいという思いから、このような醜い文章になりました。

今は、どこかに書いてあるのですが、どこかは忘れました、最初の条件が満たされないと、チェックが止まるんです。したがって、右足の小指で左耳を掻いても意味がない。

 

Konstantin Nikitin では、イテレーションの最初にこのように書きます。


 for (int i=OrdersTotal()-1; i>=0; i--)
   {
   if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
  
   if (OrderSymbol() != Symbol()) continue;
   
   if (OrderMagicNumber() != Magic) continue;

Выставляться будут стопы и тейки любым ордерам? И не надо делать опрос на предмет кто торгует Бот или человек?
 
Rewerpool:

そこで、イテレーションの最初にこのように書くと

void STOP_TAKE(void)
{
   int SPREAD    = (int)MarketInfo(Symbol(),MODE_SPREAD);
   if (stoploss<STOPLEVEL) stoploss=0; 
   if (takeprofit<STOPLEVEL) takeprofit=0;

     for(int i=0; i<OrdersTotal(); i++)
     {
          if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
          if(OrderSymbol()!=Symbol()) continue;
     
          int tip = OrderType();
          if(  tip!=OP_BUY && tip!=OP_BUYSTOP && tip!=OP_BUYLIMIT &&
               tip!=OP_SELL && tip!=OP_SELLSTOP && tip!=OP_SELLLIMIT ) continue;
     
          // переменные которые будут использоваться в любых ордерах
          int Ticket = OrderTicket();
          double    OOP = OrderOpenPrice(),
                    OSL = OrderStopLoss(),
                    OTP = OrderTakeProfit();
     
          //---
/* Если это удалить/заблокировать то будет работать со всеми ордерами не обращая внимания эксперта они или нет. Разблокировать, то сначала проверит ордера эксперта их нет то все остальные
          if( OrderMagicNumber() == Magic )
          { //----------Если Ордера Советника
               switch(tip)
               {
                    case OP_BUY:
                    case OP_BUYSTOP:
                    case OP_BUYLIMIT:
                         {
                              if (takeprofit!=0) TP = NormalizeDouble(OOP + takeprofit*Point,Digits); else TP=OTP;
                              if (stoploss!=0)   SL = NormalizeDouble(OOP - (stoploss+SPREAD)* Point,Digits); else SL=OSL;
                              if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                              else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                         }
                         break;
                         // end case
                         
                    default:
                         {
                              if (takeprofit!=0) TP = NormalizeDouble(OOP - takeprofit*Point,Digits); else TP=OTP;
                              if (stoploss!=0)   SL = NormalizeDouble(OOP + (stoploss+SPREAD)* Point,Digits); else SL=OSL;             
                              if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                              else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                         } // end case
               } // end switch
               
               continue;
          }
*/
          switch(tip)
          {
               case OP_BUY:
               case OP_BUYSTOP:
               case OP_BUYLIMIT:
                    {
                         if (takeprofit!=0) TP = NormalizeDouble(OOP + takeprofit*Point,Digits); else TP=OTP;
                         if (stoploss!=0)   SL = NormalizeDouble(OOP - (stoploss+SPREAD)* Point,Digits); else SL=OSL;       
                         if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                         else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                    }
                    break;
                    // end case
                         
               default:
                    {
                         if (takeprofit!=0) TP = NormalizeDouble(OOP - takeprofit*Point,Digits); else TP=OTP;
                         if (stoploss!=0)   SL = NormalizeDouble(OOP + (stoploss+SPREAD)* Point,Digits); else SL=OSL;             
                         if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                         else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                    } // end case
          } // end switch
     } // end for
} // end STOP_TAKE
こんな感じ。
 

こんにちは。このように書かれています。

"製品にはEX4ファイルを1つだけ含めることができ、追加のファイルは許可されません。EX4ファイルの名前と入力パラメータの名前は、必ずラテン文字で記述してください。ユーザーフレンドリーなインターフェイスを実現するために、Resourcesの 利用を推奨します。

セキュリティ上の理由から、プログラム内でDLLを呼び出すことはできません。デモプログラムにテストデータが必要な場合は、プログラムが自ら必要なファイルを作成し、ユーザーに通知する必要があります。ResourceLoad機能を使って必要なファイルを追加することもできますが、すべての製品はマーケットプレイスで公開される前に悪意のある行為の可能性がないかチェックされますので、ご注意ください。

本商品に、取引時間、取引口座の種類や数、金融商品等による制限を設けることはできません。このような行為はすべてバイヤーにとって不都合なものとみなされ、容認されることはありません。"

セイハウ......。インジケータにEAリクエストを行う。

 
Oleksandr Kulibaba:

こんにちは。このように書かれています。

"製品にはEX4ファイルを1つだけ含めることができ、追加のファイルは許可されません。EX4ファイルの名前と入力パラメータの名前は、必ずラテン文字で記述してください。ユーザーフレンドリーなインターフェイスを実現するために、Resourcesの 利用を推奨します。

セキュリティ上の理由から、プログラム内でDLLを呼び出すことはできません。デモプログラムにテストデータが必要な場合は、プログラムが自ら必要なファイルを作成し、ユーザーに通知する必要があります。ResourceLoad機能を使って必要なファイルを追加することもできますが、すべての製品はマーケットプレイスで公開される前に悪意のある行為の可能性がないかチェックされますので、ご注意ください。

本商品に、取引時間、取引口座の種類や数、金融商品等による制限を設けることはできません。このような行為はすべてバイヤーにとって不都合なものとみなされ、容認されることはありません。"

セイハウ......。インジケータにEAリクエストを行う。

あなた自身が答えを書きました:リソースを使用する

//+------------------------------------------------------------------+ 
#resource "\\Indicators\\SampleIndicator.ex5" 
int handle_ind; 
//+------------------------------------------------------------------+ 
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+ 
int OnInit() 
  { 
//--- 
   handle_ind=iCustom(_Symbol,_Period,"::Indicators\\SampleIndicator.ex5"); 
   if(handle_ind==INVALID_HANDLE) 
     { 
      Print("Expert: iCustom call: Error code=",GetLastError()); 
      return(INIT_FAILED); 
     } 
//--- 
   return(INIT_SUCCEEDED); 
  }
Документация по MQL5: Программы MQL5 / Ресурсы
Документация по MQL5: Программы MQL5 / Ресурсы
  • www.mql5.com
В данном примере показано как проигрывать звуки из файлов Ok.wav и timeoit.wav, входящих в стандартную поставку терминала. Эти файлы находятся в папке означает папку, из которой запущен клиентский терминал MetaTrader 5.  Программным путем из mql5-программы каталог терминала можно узнать следующим образом: Расположение каталога данных терминала...
 
Vitaly Muzichenko:

自分で書いた答え:リソースを使う

回答ありがとうございました。でも、もう読んじゃったし、挿入してみたんです。取れない、やり方が悪い、置き場所が悪い。3つの指標に呼びかけています。このスクリプトの詳細を教えてください。

何が、どこで、どんなパラメータが...。よろしくお願いします。

//+------------------------------------------------------------------+ 
#resource "\\Indicators\\SampleIndicator.ex5" 
int handle_ind; 
//+------------------------------------------------------------------+ 
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+ 
int OnInit() 
  { 
//--- 
   handle_ind=iCustom(_Symbol,_Period,"::Indicators\\SampleIndicator.ex5"); 
   if(handle_ind==INVALID_HANDLE) 
     { 
      Print("Expert: iCustom call: Error code=",GetLastError()); 
      return(INIT_FAILED); 
     } 
//--- 
   return(INIT_SUCCEEDED); 
  }
 
Oleksandr Kulibaba:

返信ありがとうございました。でも、もう読んで入れてみたんです。うまくいかないんです。 やり方が悪いのか、入れる場所が悪いのか、どちらかです。3つの指標に呼びかけています。このスクリプトの詳細を教えてください。

何が、どこで、どんなパラメータが...。よろしくお願いします。

3つまたは必要な数だけ変数を作成し、例のように呼び出しますhandle_ind=iCustom(_Symbol,_Period,"::Indicators-blah-blah)Insert code.ただ、みんなに理解してもらうために!

アイカスタムはTHIS!

iCustom

Возвращает значение указанного пользовательского индикатора. 



double  iCustom( 
   string       symbol,           // имя символа 
   int          timeframe,        // таймфрейм 
   string       name,             // папка/имя_пользовательского индикатора 
   ...                            // список входных параметров индикатора 
   int          mode,             // источник данных 
   int          shift             // сдвиг 
   );
 
もし
if(handle_ind==INVALID_HANDLE) то это значит - не корректный хэндл
 
Rewerpool:

3つの変数、または必要な数だけ作成し、例のようにポーリングしますhandle_ind=iCustom(_Symbol,_Period,"::Indicatorsblah-blah-blah)Insert code.ただ、みんなに理解してもらうために!

アイカスタムはTHIS!

もし

試してみます。ありがとうございます。

 
Oleksandr Kulibaba コードを挿入して、エラー!理解すること!いい人が助けてくれる!何が問題なのかはっきりしない!?
 
Konstantin Nikitin いい仕事してますね。コードから削除
if ((OSL==0&&stoploss!=0)||(OTP==0&&takeprofit!=0))

ストップは今、1ティックごとにピクピクしています )))))


投稿、magician !のコードクロージャーをご指摘いただきました。それはわかった!」。ただ、手仕事でトレードしていたのが、急に一歩下がってEAにコントロールを委ねる(パターンとエントリーポイントを探す)必要が出てきた、というような状況です。すべての操作を分けたい。しかし、万人に求められるストップ&テイクアウト。まだ掘り下げが甘いのかもしれませんね~。