エラー、バグ、質問 - ページ 2829

 
社内の新機能。
int OrderExist( const string symbol, ENUM_ORDER_TYPE type, ulong magic, ulong &tickets[] );

int PositionExist( const string symbol, ENUM_POSITION_TYPE type, ulong magic, ulong &tickets[] );
 

ごあいさつどこに行けばいいのか、アドバイスやリンクを教えてください。

VPS WinServer 2012 R2、MT4が実行され、ある時点でアンロードされ、再度実行する必要があります。

どこを見ればいいのか、などなど・・・。

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

 

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

mql5の特性、ヒントとコツ

fxsaber, 2020.08.20 18:52

RannForex-Serverの デモ口座で以下のコードを実行すると、このEAを実行することですぐにこの状況を再現することができます。

// Воспроизведение ситуации наличия позиции и отложенного ордера с одинаковыми тикетами.

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

MqlTradeResult Result = {0};
MqlTradeRequest Request = {0};

int OnInit()
{

        Request.action = TRADE_ACTION_PENDING;
        Request.symbol = _Symbol;
        Request.volume = 100;
        Request.price = Ask;
        Request.type = ORDER_TYPE_BUY_LIMIT;
        
        return(!OrderSend(Request, Result)); // Выставили лимитник по текущей цене.
}

#define  TOSTRING(A) #A + " = " + DoubleToString(A, _Digits)

void OnTradeTransaction( const MqlTradeTransaction&, const MqlTradeRequest&, const MqlTradeResult& )
{
  if (OrderSelect(Result.order) && (OrderGetInteger(ORDER_STATE) == ORDER_STATE_PARTIAL)) // Если наш лимитник исполнился частично
  {
    if (Ask - OrderGetDouble(ORDER_PRICE_OPEN) < 100 * _Point)                            // и находится близко от текущей цены
    {
        Request.action = TRADE_ACTION_MODIFY;
        Request.order = Result.order;
        Request.price = Ask - 1000 * _Point;

      // тогда передвигаем его подальше.
      if (OrderSend(Request, Result)) // Если синхронный OrderSend выполнился успешно, то торговое окружение должно соответствовать.
      {
        // Проверка соответствия торгового окружения.
        if (OrderSelect(Request.order) &&                                                                // Если получилось взять данные нашего ордера
            NormalizeDouble(OrderGetDouble(ORDER_PRICE_OPEN) - Request.price, _Digits))                  // и цена ордера не равна цене успешного OrderSend
          Alert("Bug:" + TOSTRING(OrderGetDouble(ORDER_PRICE_OPEN)) + " != " + TOSTRING(Request.price)); // сообщаем о баге MT5.
      }
    }
    else
      ExpertRemove();
  }     
}


ところで、このスクリプトでは、synchronous OrderSendの実行に関するバグが(初めてとは限らない)示されています。

Alert: Bug:OrderGetDouble(ORDER_PRICE_OPEN) = 0.89837 != Request.price = 0.88837

OrderSendが実行されて数十/数百ミリ秒経過すると、OrderSendで正常に発注された注文価格ではなく、古い注文価格になってしまうのです。

 

検索する - 自分で見つけることはできません。

SQLiteで、テーブルの複数のフィールドを持つ行の一意性を実現するには?

ZS: どなたか例を挙げていただけるとありがたいのですが...。

 

フォーラムタブをヘッダーリストの最上部に移動させたのは誰のアイデアですか?

悪い考えだ、誰にも言うなよ。

 
Baseのコードハイライトが 1週間以上機能せず、添付ファイルの切り替えもエラーになる。
 
Igor Makanu:

検索する - 自分で見つけることはできません。

SQLiteで、テーブルの複数のフィールドを持つ行の一意性を実現するには?

ZS: どなたか例を挙げていただけるとありがたいのですが...。

複数のフィールドに対してユニークキーを作成する(既存のデータを持つ行は、作成されるユニークネスと一致しなければならず、そうでない場合はエラーが発生する)。

ALTER TABLE `t1` ADD UNIQUE (
`id` ,
`name` ,
`account`
);
 
Andrey Khatimlianskii:

複数のフィールドにまたがるユニークキーを作成する(既存のデータを持つ行は、作成されるユニークネスと一致しなければならず、そうでない場合はエラーが発生する)。

OK、やってみますが、SQLの本を読む必要がありそうです、知識が足りませんね

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

 
Andrey Dik:

フォーラムタブをヘッダーリストの最上部に移動させたのは誰のアイデアですか?

悪い考えだ、誰にも言うなよ。

私もそう思います。

 
Andrey Dik:

フォーラムタブをヘッダーリストの最上部に移動させたのは誰のアイデアですか?

悪い考えだ、誰にも言うなよ。

何が問題なのか?反射神経?)

そして、「フォーラム」は「ドキュメント」よりもまだよくクリックされています - 少なくともこのサイトでは...。