Многие трейдеры на Московской бирже хотели бы автоматизировать свои торговые алгоритмы, но не знают с чего начать. Язык MQL5 предлагает не только огромный набор торговых функций, но и готовые классы, которые максимально облегчают первые шаги в алготрейдинге.
//+------------------------------------------------------------------+//| Возврат стрингового результата торговой операции по его коду |//+------------------------------------------------------------------+string ResultRetcodeDescription(int retcode)
{
string str;
//----switch(retcode)
{
caseTRADE_RETCODE_REQUOTE:
str="TRADE_RETCODE_REQUOTE(Реквота)";
break;
caseTRADE_RETCODE_REJECT:
str="TRADE_RETCODE_REJECT(Запрос отвергнут)";
break;
caseTRADE_RETCODE_CANCEL:
str="TRADE_RETCODE_CANCEL(Запрос отменен трейдером)";
break;
caseTRADE_RETCODE_PLACED:
str="TRADE_RETCODE_PLACED(Ордер размещен)";
break;
caseTRADE_RETCODE_DONE:
str="TRADE_RETCODE_DONE(Заявка выполнена)";
break;
caseTRADE_RETCODE_DONE_PARTIAL:
str="TRADE_RETCODE_DONE_PARTIAL(Заявка выполнена частично)";
break;
caseTRADE_RETCODE_ERROR:
str="TRADE_RETCODE_ERROR(Ошибка обработки запроса)";
break;
caseTRADE_RETCODE_TIMEOUT:
str="TRADE_RETCODE_TIMEOUT(Запрос отменен по истечению времени)";
break;
caseTRADE_RETCODE_INVALID:
str="TRADE_RETCODE_INVALID(Неправильный запрос)";
break;
caseTRADE_RETCODE_INVALID_VOLUME:
str="Неправильный объем в запросе";
break;
caseTRADE_RETCODE_INVALID_PRICE:
str="TRADE_RETCODE_INVALID_VOLUME(Неправильная цена в запросе)";
break;
caseTRADE_RETCODE_INVALID_STOPS:
str="TRADE_RETCODE_INVALID_STOPS(Неправильные стопы в запросе)";
break;
caseTRADE_RETCODE_TRADE_DISABLED:
str="TRADE_RETCODE_TRADE_DISABLED(Торговля запрещена)";
break;
caseTRADE_RETCODE_MARKET_CLOSED:
str="TRADE_RETCODE_MARKET_CLOSED(Рынок закрыт)";
break;
caseTRADE_RETCODE_NO_MONEY:
str="TRADE_RETCODE_NO_MONEY(Нет достаточных денежных средств для выполнения запроса)";
break;
caseTRADE_RETCODE_PRICE_CHANGED:
str="TRADE_RETCODE_PRICE_CHANGED(Цены изменились)";
break;
caseTRADE_RETCODE_PRICE_OFF:
str="TRADE_RETCODE_PRICE_OFF(Отсутствуют котировки для обработки запроса)";
break;
caseTRADE_RETCODE_INVALID_EXPIRATION:
str="TRADE_RETCODE_INVALID_EXPIRATION(Неверная дата истечения ордера в запросе)";
break;
caseTRADE_RETCODE_ORDER_CHANGED:
str="TRADE_RETCODE_ORDER_CHANGED(Состояние ордера изменилось)";
break;
caseTRADE_RETCODE_TOO_MANY_REQUESTS:
str="TRADE_RETCODE_TOO_MANY_REQUESTS(Слишком частые запросы)";
break;
caseTRADE_RETCODE_NO_CHANGES:
str="TRADE_RETCODE_NO_CHANGES(В запросе нет изменений)";
break;
caseTRADE_RETCODE_SERVER_DISABLES_AT:
str="TRADE_RETCODE_SERVER_DISABLES_AT(Автотрейдинг запрещен сервером)";
break;
caseTRADE_RETCODE_CLIENT_DISABLES_AT:
str="TRADE_RETCODE_CLIENT_DISABLES_AT(Автотрейдинг запрещен клиентским терминалом)";
break;
caseTRADE_RETCODE_LOCKED:
str="TRADE_RETCODE_LOCKED(Запрос заблокирован для обработки)";
break;
caseTRADE_RETCODE_FROZEN:
str="TRADE_RETCODE_FROZEN(Ордер или позиция заморожены)";
break;
caseTRADE_RETCODE_INVALID_FILL:
str="TRADE_RETCODE_INVALID_FILL(Указан неподдерживаемый тип исполнения ордера по остатку)";
break;
caseTRADE_RETCODE_CONNECTION:
str="TRADE_RETCODE_CONNECTION(Нет соединения с торговым сервером)";
break;
caseTRADE_RETCODE_ONLY_REAL:
str="TRADE_RETCODE_ONLY_REAL(Операция разрешена только для реальных счетов)";
break;
caseTRADE_RETCODE_LIMIT_ORDERS:
str="TRADE_RETCODE_LIMIT_ORDERS(Достигнут лимит на количество отложенных ордеров)";
break;
caseTRADE_RETCODE_LIMIT_VOLUME:
str="TRADE_RETCODE_LIMIT_VOLUME(Достигнут лимит на объем ордеров и позиций для данного символа)";
break;
caseTRADE_RETCODE_INVALID_ORDER:
str="TRADE_RETCODE_INVALID_ORDER:Неверный или запрещённый тип ордера)";
break;
caseTRADE_RETCODE_POSITION_CLOSED:
str="TRADE_RETCODE_POSITION_CLOSED:Позиция с указанным POSITION_IDENTIFIER уже закрыта)";
break;
caseTRADE_RETCODE_INVALID_CLOSE_VOLUME:
str="TRADE_RETCODE_INVALID_CLOSE_VOLUME(Закрываемый объем превышает текущий объем позиции)";
break;
caseTRADE_RETCODE_CLOSE_ORDER_EXIST:
str="TRADE_RETCODE_CLOSE_ORDER_EXIST(Для указанной позиции уже есть ордер на закрытие)";
break;
caseTRADE_RETCODE_LIMIT_POSITIONS:
str="TRADE_RETCODE_LIMIT_POSITIONS(Количество открытых позиций, которое можно одновременно иметь на счете, может быть ограничено настройками сервера)";
break;
caseTRADE_RETCODE_REJECT_CANCEL:
str="TRADE_RETCODE_REJECT_CANCEL(Запрос на активацию отложенного ордера отклонен, а сам ордер отменен)";
break;
caseTRADE_RETCODE_LONG_ONLY:
str="TRADE_RETCODE_LONG_ONLY(Запрос отклонен, так как на символе установлено правило \"Разрешены только длинные позиции\")";
break;
caseTRADE_RETCODE_SHORT_ONLY:
str="TRADE_RETCODE_SHORT_ONLY(Запрос отклонен, так как на символе установлено правило \"Разрешены только короткие позиции\")";
break;
caseTRADE_RETCODE_CLOSE_ONLY:
str="TRADE_RETCODE_CLOSE_ONLY(Запрос отклонен, так как на символе установлено правило \"Разрешено только закрывать существующие позиции\")";
break;
caseTRADE_RETCODE_FIFO_CLOSE:
str="TRADE_RETCODE_FIFO_CLOSE(Запрос отклонен, так как для торгового счета установлено правило \"Разрешено закрывать существующие позиции только по правилу FIFO\")";
break;
case TRADE_RETCODE_HEDGE_PROHIBITED:
str="TRADE_RETCODE_HEDGE_PROHIBITED(Запрос отклонен, так как для торгового счета установлено правило \"Запрещено открывать встречные позиции по одному символу\")";
break;
//case : str=""; break;//case : str=""; break;//case : str=""; break;//case : str=""; break;default:
str="Неизвестный результат";
}
//----return(str);
}
は、このように動作するようです。
が、非常に遅いので、あまり良い解決策とは言えません。
は、このように動作するようです。
が、非常に遅いので、あまり良い解決策とは言えません。
ほぼその選択肢にしましたね。
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
偉大で恐ろしいMT4フォーエバー(あるいは賢い移行戦略の作り方)
fxsaber, 2021.05.09 00:36
この条件を利用することができます。
一般的には、開発者が何らかの同期的な RefreshPositions() を行い、サーバーからポジションとオーダーの状態を確実に返す必要があります。
そして、必要な人は非同期で命令を出し、必要でない人はプログラム本体でサーバーからの回答を待つ。
それが、そうなんです。スクリプトの実行が終了すると、1つまたは2つの位置がぶら下がったままになります(コードに挿入されたプリントの数によって異なります)。
コード
結果
この図を完成させるために、記事https://www.mql5.com/ru/articles/2513 のトレード・イベント・リスナーを隣のチャートに追加します。
イベントの順番を見るには
+ addrequest_id 出力 - 注文送信時に端末が設定するリクエストID
実際にどれだけのオーダーが送られているのか
イモ、OnTradeTransaction()も何も保証されていません、イベントのシーケンスは、端末自体に情報の配信と同様に保証されていません - 私は、最も信頼性の高いインターネットプロバイダーではないケースを意味します。
OnTradeTransaction()を制御するメカニズムがない、または、すべてのイベントを厳密に順番に受け取ったか受け取っていない。
PZY: あまり忙しくないMQプログラマーが2時間見つけて、エラーコードのテキスト説明を返す関数を書いてくれればいいのに。 そうすれば、MQL5では書くことが少なくなり、MT4では必要なくなる。彼らに手動でやらせればいい。
;)
codobaseで発見、最新コード追加
そこで、人々はブラックボックスへのアクセスを求め、それを実現したのです。
あとは自分で同期をとるしかない。と聞かれた?そうなんです。そうなんですか?そうなんです。いいんですか?いいんじゃないかと言われました。一度与えたら、悪くなった。
1.頼んでいない。
2.誰もその代償がデータの完全性だとは言っていない。それはもっと重要なことだ。
私たちのせいだ」というような赤裸々なデマゴギーではなく、松葉杖を使わずに解決策を提示できないか?
kodobaseで発見し、最新のコードを追加しました。
エラーコードを 開き、マウスをハイライトし、Ctrl+C、空のExcelページを作成し、Ctrl+V、case:と逆カンマで列を追加 して、MEのヘルプから30分で同じコードを実行しました。
その後、MEでCtrl+C+Ctrl+V
なるほど、「苦難に耐える」というのは、軍用マニュアルの条文だけでなく、我々のメンタリティに近いものがあるようだ。
1.頼んでいない。
2.誰もその代償がデータの完全性だとは言っていない。それはもっと重要なことだ。
自分を責める」デマゴギーではなく、松葉杖をつかない解決策を提案できないか?
エラーコードを 開き、マウスをハイライトし、Ctrl+C、空のExcelページを作成し、Ctrl+V、case:と反転カンマで列を追加 して、MEヘルプから30分で同じコードを実行しました。
その後、MEでCtrl+C+Ctrl+V
なるほど、「苦難に耐える」というのは、軍用マニュアルの条文だけでなく、我々のメンタリティに近いものがあるようだ。