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

 
MakarFX:

教えてください、このフォントの選択をインジケータで行うことは可能でしょうか?


なぜダメなのか?独自のenumを作ると問題ばかり............。

 
Alexey Viktorov:

なぜダメなのか?独自のenumを作ると問題ばかり............。

それはわかったのですが、インストールされているフォントの一覧を要求するにはどうしたらいいのでしょうか?

 
Nikolai Semko:

お笑い芸人さんなんですね。

誰と話していたんだろう?


何か見落としていました。ありがとうございます(苦笑)。それだ!

 
ANDREY:

了解です。ありがとうございました。

また、これだけ多くの注文を開けるのは、EAとしても大変だと思いました。以下のコードで注文数を制限してみました。

つまり、10:00にだけ注文を開ける。しかし、結果は同じです。

2020.10.27 10:25:17.548 Core 1 使用メモリ 272 Mb、ヒストリーデータ 36 Mb、ティックデータ 64 Mb を含む



正直なところ、MKL5を徹底的に知っているわけではありません。しかし、その理屈はいい加減なものだ。注文を1件開ける必要があります。これは、関数の最初に時変数をティックに割り当て、最後に別の変数に割り当てることで実現されます。途中で変数が等しくなければ、注文を出す。上の分単位の例も同じです。

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //
int tm; 
//+------------------------------------------------------------------+
void OnTick()
  {
//Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
   MqlDateTime time_now;     // Будет использоваться для
   
 TimeCurrent(time_now);  
 if(!SymbolInfoTick(_Symbol,latest_price))
 if(time_now.hour==10 && tm != time_now.hour) //на первом тике, когда time_now.hour станет 10 а tm еще 9
                                           // и на следующем тике tm будет равно 10


   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_RETURN;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult);
    }  

tm= time_now.hour;
     return;
  }



 
MakarFX:

これは明らかですが、インストールされているフォントのリストを要求するにはどうすればよいのでしょうか。

あなたの例では、自作のリストだと思います。ソフトウェアに問い合わせることなく

 
Valeriy Yastremskiy:

正直なところ、MKL5を徹底的に知っているわけではありません。しかし、その理屈はいい加減なものだ。同じものを開くには、1回の注文が必要です。これは、関数の最初に時変数をティックに割り当て、最後に別の変数に割り当てることで実現されます。途中で変数が等しくなければ、注文を出す。上の分単位の例も同じです。

そのため、EAはマジコンだけで行うことをお勧めします。

1日に1回、ある時刻に注文を出すというタスクであれば、アルゴリズムは次のようになります。

- EAを起動すると、オープンオーダーの数をチェックし、もし私たちのマジシャンの注文がオープンであれば、次のティックまで終了します。

- 注文がない場合、EAは現在の時間と分が指定されたものより大きくなるまで待ちます。

- この時間が来たら、EAは注文履歴を チェックし、もしhaが私たちのマジックで注文を出していなければ、注文を出して終了します。終了はサーバーエラーを処理しないために有効で、もし注文が出ていなければ、次のティックでもう一度やってみます。が、これは好みや目的の問題で、最も簡単な実装です )))

 
Igor Makanu:

だから、EAの仕事はマジシャンと二人だけでやるようにしたほうがいい。

1日1回、ある時刻に注文を出すというタスクの場合、アルゴリズムは次のようになる。

- EAを起動すると、オープンオーダーの数をチェックし、もし私たちのマジシャンの注文がオープンであれば、次のティックまで終了します。

- 注文がない場合、EAは現在の時間と分が指定されたものより大きくなるまで待ちます。

- この時間が来たら、EAは注文履歴を チェックし、もしhaが私たちのマジックで注文を出していなければ、注文を出して終了します。終了はサーバーエラーを処理しないために有効で、もし注文が出ていなければ、次のティックでもう一度やってみます。しかし、これは好みや目的の問題であり、最も簡単な実装です )))

そこはまだ、マジシャンの域には達していない。もちろんです。5cではもちろん、エラー解析でループさせるか、ティックを使ってポジションを開こうとするかのジレンマがあります。長文回答の場合、ティックにやさしいかもしれません。

 
Valeriy Yastremskiy:

正直なところ、MKL5を徹底的に知っているわけではありません。しかし、その理屈はいい加減なものだ。同じものを開くには、1回の注文が必要です。これは、関数の最初に時変数をティックに割り当て、最後に別の変数に割り当てることで実現されます。途中で変数が等しくなければ、注文を出す。上の分単位の例も同じです。



ありがとうございました。いただいた知識は、まさに私に不足していたものでした。同じように、でも4で類推してみました。この場合、その例えは見当違いであることが判明した。
また、ありがとうございました。

 
Igor Makanu:

だから、EAの仕事はマジシャンと二人だけでやるようにしたほうがいい。

1日1回、ある時刻に注文を出すというタスクの場合、アルゴリズムは次のようになる。

- EAを起動すると、オープンオーダーの数をチェックし、もし私たちのマジシャンの注文がオープンであれば、次のティックまで終了します。

- 注文がない場合、EAは現在の時間と分が指定されたものより大きくなるまで待ちます。

- この時間が来て、EAは注文履歴を チェックし、過去24時間のために私たちの魔術師と注文が置かれていない場合、それは注文を入れて終了します - 終了は、サーバーのエラーを処理しないために便利です、注文が置かれていない場合は、次のティックで我々は再びそれをやろうとする、すなわち、このティックで複数の注文オープンのサイクルを整理する必要はありません...。が、これは好みや目的の問題であり、最も簡単な実装です )))

貴重な情報をありがとうございました。おかげさまで、mql5への理解が深まりました。
あなたの思考プロセスの例として、私のコードを示していただけると、とてもありがたいです。そうすることで、あなたのアイデアを素早く正確に吸収することができるのです。
今回もありがとうございました。

以下は私のコードで、10:00にしか注文が始まらないという条件を間違って書いています。

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //

//+------------------------------------------------------------------+
void OnTick()
  {
//Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
   MqlDateTime time_now;     // Будет использоваться для
   
 TimeCurrent(time_now);  
 if(!SymbolInfoTick(_Symbol,latest_price))
 if(time_now.hour==10&&time_now.min==0)
   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_RETURN;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult);
    }   
     return;
  }
 
ANDREY:

以下は私のコードで、10:00にのみ注文が開始されるという条件のスペルを間違えています。

純粋なMQL5では書きません。CTrade SBクラスを使用して注文を出すことができます。

SBの活用に関する記事をCTradeで 検索する