Metatrader 5で動作しないアドバイザーは1つもありません。 - ページ 6

 
デモ・ドルで
 
ロボットのダウンロードは、まだ1つも動作していません。
 

ドル建てに変更、社内EAが機能せず、私のは機能する

注文の実行タイプはORDER_FILLING_RETURN であるべきです。

 
sandex:

ドル建てに変更、社内EAが機能せず、私のは機能する

注文の実行タイプはORDER_FILLING_RETURN であるべきです。

r このタイプを入力する場所)
 
dogmaone:
r このタイプを入力する場所)
もし、あなたのロボットが動くのであれば、標準的なロボットも動くようにするには、どこに正しい値を入れればいいか教えてください。
 

エキスパートアドバイザーのロジックが原因であることは間違いありません(コードがすべてのチェックを通過しないか、取引モードを 考慮していない)。

少なくとも、サーバー「BCS5-Real」でのこの簡単なコードは簡単に動作します。

//+------------------------------------------------------------------+
//|                                                    OrderSend.mq5 |
//|                              Copyright © 2015, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//+------------------------------------------------------------------+
//| https://www.mql5.com/ru/articles/481                             |
//+------------------------------------------------------------------+

#include<Trade\Trade.mqh>
//--- объект для проведения торговых операций
CTrade  trade;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- зададим MagicNumber для идентификации своих ордеров
   int MagicNumber=123456;
   trade.SetExpertMagicNumber(MagicNumber);
//--- установим допустимое проскальзывание в пунктах при совершении покупки/продажи
   int deviation=10;
   trade.SetDeviationInPoints(deviation);
//--- режим заполнения ордера, нужно использовать тот режим, который разрешается сервером
   trade.SetTypeFilling(ORDER_FILLING_RETURN);
//--- режим логирования: лучше не вызывать этот метод вообще, класс сам выставит оптимальный режим
   trade.LogLevel(1);
//--- какую функцию использовать для торговли: true - OrderSendAsync(), false - OrderSend()
   trade.SetAsyncMode(true);
//---
/*//--- 1. пример покупки по текущему символу
   if(!trade.Buy(0.1))
     {
      //--- сообщим о неудаче
      Print("Метод Buy() потерпел неудачу. Код возврата=",trade.ResultRetcode(),
            ". Описание кода: ",trade.ResultRetcodeDescription());
     }
   else
     {
      Print("Метод Buy() выполнен успешно. Код возврата=",trade.ResultRetcode(),
            " (",trade.ResultRetcodeDescription(),")");
     }*/

/*//--- 2. пример покупки по указанному символу
   if(!trade.Buy(0.1,"GBPUSD"))
     {
      //--- сообщим о неудаче
      Print("Метод Buy() потерпел неудачу. Код возврата=",trade.ResultRetcode(),
            ". Описание кода: ",trade.ResultRetcodeDescription());
     }
   else
     {
      Print("Метод Buy() выполнен успешно. Код возврата=",trade.ResultRetcode(),
            " (",trade.ResultRetcodeDescription(),")");
     }*/
     
//Можно указать все параметры ордера: уровни Stop Loss/Take Profit,цена открытия и комментарий.
//--- 3. пример покупки по указанному символу символу с заданными SL и TP
   double volume=0.1;         // укажем объем торговой операции
   string symbol="GBPUSD";    // укажем символ, на котором проводится операция
   int    digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS); // количество знаков после запятой
   double point=SymbolInfoDouble(symbol,SYMBOL_POINT);         // пункт
   double bid=SymbolInfoDouble(symbol,SYMBOL_BID);             // текущая цена для закрытия LONG
   double SL=bid-1000*point;                                   // ненормализованное значение SL
   SL=NormalizeDouble(SL,digits);                              // нормализуем Stop Loss
   double TP=bid+1000*point;                                   // ненормализованное значение TP
   TP=NormalizeDouble(TP,digits);                              // нормализуем Take Profit
//--- получим текущую цену открытия для LONG позиций
   double open_price=SymbolInfoDouble(symbol,SYMBOL_ASK);
   string comment=StringFormat("Buy %s %G lots at %s, SL=%s TP=%s",
                               symbol,volume,
                               DoubleToString(open_price,digits),
                               DoubleToString(SL,digits),
                               DoubleToString(TP,digits));
   if(!trade.Buy(volume,symbol,open_price,SL,TP,comment))
     {
      //--- сообщим о неудаче
      Print("Метод Buy() потерпел неудачу. Код возврата=",trade.ResultRetcode(),
            ". Описание кода: ",trade.ResultRetcodeDescription());
     }
   else
     {
      Print("Метод Buy() выполнен успешно. Код возврата=",trade.ResultRetcode(),
            " (",trade.ResultRetcodeDescription(),")");
     }
  }
//+------------------------------------------------------------------+
 
Karputov Vladimir:

Expert Advisor のロジックが間違いなく原因です(コードがすべてのチェックを通過しないか、取引モードを 考慮しない)。

少なくとも、サーバー「BCS5-Real」上では、このような簡単なコードは簡単に動作します。

私はあなたのコードをコンパイルしたいときにアドバイスしてください:作成するために行く(EAテンプレート)追加のイベントハンドラ何を選択するには?
 
Sergey Ponomarev:
私はあなたのコードをコンパイルしたいときに私に助言してください:私は(EAテンプレート)追加のイベントハンドラを作成したいのですが、どちらを選択するのですか?
これはスクリプトです。このスクリプトは、この取引サーバーで自動モードでポジションを 開くことができるかを確認するためのものです。
 
Karputov Vladimir:
これはスクリプトです。このスクリプトは、この取引サーバーでポジションが まだ自動モードで開くことができるかどうかを確認するためのものです。
なるほど...。つまり、私のブローカーのサーバーは他のロジックが必要なのですね)))
 
Karputov Vladimir:
これはスクリプトです。このスクリプトは、この取引サーバーで自動モードでまだポジションを 開くことができるかどうかを確認するためのものです。
お疲れ様でした :)