では、支持されない政権があった場合はどうするのか。なぜそれで取引を禁止する必要があるのでしょうか?
特に「逆指値注文の設定モードに対応していない」場合は?これが、まったくトレードできないことの悩みです。
頭の中の©破壊
冒頭に書いてありますね。
重要:話題を「引き伸ばす」ことがないように、コメントがあれば。
または質問がある場合は、このセクションに別のトピックを作成してください(ここでは回答しません)。
P / S 特に「才能のある」人のための:
この関数では、以下のパラメータをチェックする必要があります。
は、EAで使用するものです。以下は その一例です。
続けています。
よく使う機能、便利な機能
CheckError()関数そのもの(例では全てのリターンコードではありません。)
.........................................................................
リターンコードの説明
string GetRetCode( const uint code ) { string retcode; switch( code ) { case TRADE_RETCODE_REQUOTE: retcode = "Реквота"; break; case TRADE_RETCODE_REJECT: retcode = "Запрос отвергнут"; break; case TRADE_RETCODE_CANCEL: retcode = "Запрос отменен трейдером"; break; case TRADE_RETCODE_PLACED: retcode = "Ордер размещен"; break; case TRADE_RETCODE_DONE: retcode = "Заявка выполнена"; break; case TRADE_RETCODE_DONE_PARTIAL: retcode = "Заявка выполнена частично"; break; case TRADE_RETCODE_ERROR: retcode = "Ошибка обработки запроса"; break; case TRADE_RETCODE_TIMEOUT: retcode = "Запрос отменен по истечению времени"; break; case TRADE_RETCODE_INVALID: retcode = "Неправильный запрос"; break; case TRADE_RETCODE_INVALID_VOLUME: retcode = "Неправильный объем в запросе"; break; case TRADE_RETCODE_INVALID_PRICE: retcode = "Неправильная цена в запросе"; break; case TRADE_RETCODE_INVALID_STOPS: retcode = "Неправильные стопы в запросе"; break; case TRADE_RETCODE_TRADE_DISABLED: retcode = "Торговля запрещена"; break; case TRADE_RETCODE_MARKET_CLOSED: retcode = "Рынок закрыт"; break; case TRADE_RETCODE_NO_MONEY: retcode = "Нет достаточных денежных средств для выполнения запроса"; break; case TRADE_RETCODE_PRICE_CHANGED: retcode = "Цены изменились"; break; case TRADE_RETCODE_PRICE_OFF: retcode = "Отсутствуют котировки для обработки запроса"; break; case TRADE_RETCODE_INVALID_EXPIRATION: retcode = "Неверная дата истечения ордера в запросе"; break; case TRADE_RETCODE_ORDER_CHANGED: retcode = "Состояние ордера изменилось"; break; case TRADE_RETCODE_TOO_MANY_REQUESTS: retcode = "Слишком частые запросы"; break; case TRADE_RETCODE_NO_CHANGES: retcode = "В запросе нет изменений"; break; case TRADE_RETCODE_SERVER_DISABLES_AT: retcode = "Автотрейдинг запрещен сервером"; break; case TRADE_RETCODE_CLIENT_DISABLES_AT: retcode = "Автотрейдинг запрещен клиентским терминалом"; break; case TRADE_RETCODE_LOCKED: retcode = "Запрос заблокирован для обработки"; break; case TRADE_RETCODE_FROZEN: retcode = "Ордер или позиция заморожены"; break; case TRADE_RETCODE_INVALID_FILL: retcode = "Указан неподдерживаемый тип исполнения ордера по остатку"; break; case TRADE_RETCODE_CONNECTION: retcode = "Нет соединения с торговым сервером"; break; case TRADE_RETCODE_ONLY_REAL: retcode = "Операция разрешена только для реальных счетов"; break; case TRADE_RETCODE_LIMIT_ORDERS: retcode = "Достигнут лимит на количество отложенных ордеров"; break; case TRADE_RETCODE_LIMIT_VOLUME: retcode = "Достигнут лимит на объем ордеров и позиций для данного символа"; break; case TRADE_RETCODE_INVALID_ORDER: retcode = "Неверный или запрещённый тип ордера"; break; case TRADE_RETCODE_POSITION_CLOSED: retcode = "Позиция с указанным POSITION_IDENTIFIER уже закрыта"; break; default: retcode = "Нет кода возврата."; break; } return( retcode ); }
推奨する。
FORTSのアドバイザーを設計する場合、Tickイベントの使用はお勧めしませんが
BookEvent イベントを 使用するのがよいでしょう。
例
ダニを追加する。
(OnInit()内でのみ使用可能)
if ( !MarketBookAdd( _Symbol ) ) { MessageBox( "Не добавлен стакан фьючерса " + _Symbol + "!", "Ошибка", MB_OK | MB_ICONHAND ); return( INIT_FAILED ); }
グラスの購読を解除する。
void OnDeinit( const int reason ) { MarketBookRelease( _Symbol ); }
価格のタンブラーから最高のASKとBIDとその数量を取得します。
double sell_price, buy_price; long sell_volume, buy_volume; //+------------------------------------------------------------------+ //| Expert Get Stakan values function | //+------------------------------------------------------------------+ bool GetStakanValues( const string aSymbol, double &sell_price, double &buy_price, long &sell_volume, long &buy_volume ) { MqlBookInfo book_price[]; buy_price = 0; sell_price = DBL_MAX; buy_volume = 0; sell_volume = 0; //--- Get stakan if ( MarketBookGet( aSymbol, book_price ) )//getBook ) { int size = ArraySize( book_price ); //--- if ( size > 0 ) { double a_min_price = SymbolInfoDouble( aSymbol, SYMBOL_SESSION_PRICE_LIMIT_MIN ); double a_max_price = SymbolInfoDouble( aSymbol, SYMBOL_SESSION_PRICE_LIMIT_MAX ); //--- for( int i = 0; i < size; i++ ) { if ( book_price[i].type == BOOK_TYPE_SELL ) { if ( book_price[i].price < sell_price ) { sell_price = book_price[i].price; sell_volume = book_price[i].volume; } } else if ( book_price[i].type == BOOK_TYPE_BUY ) //First buy - exit { buy_price = book_price[i].price; buy_volume = book_price[i].volume; break; } } if ( ( buy_price <= a_max_price ) && ( buy_price >= a_min_price ) && ( sell_price <= a_max_price ) && ( sell_price >= a_min_price ) ) { if ( sell_price == DBL_MAX ) sell_price = 0; //--- if ( ( sell_price > 0 ) && ( buy_price > 0 ) ) { return( true ); } } } } //--- if ( sell_price == DBL_MAX ) sell_price = 0; //--- return( false); }
機能呼び出し。
( a_symbol == _Symbol ) のチェックは 必須で、変更されたのがあなたの価格スタックで あることを確認します。
//+------------------------------------------------------------------+ //| Expert On Book event function | //+------------------------------------------------------------------+ void OnBookEvent( const string &a_symbol ) { if ( a_symbol == _Symbol ) { if ( GetStakanValues( _Symbol, sell_price, buy_price, sell_volume, buy_volume ) ) { //you code } } }
THANK YOU!!!)
特別な機能
効果なし、不具合ありの場合の計算式と点数の与え方
の取引は、添付ファイルに記載されています。
P/S ルールもポイントも頻繁に変更される :(
よく使う機能、便利な機能
SetStDayTime()関数は、取引日の開始時刻(要求時点)を返す。
関数 GetExgangeFee()は、取引日(リクエスト時)の取引所手数料と取引回数を返します。
//+------------------------------------------------------------------+ //| Tr_fee.mq5 | //| Copyright 2015, Mikalas | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, Mikalas" #property link "https://www.mql5.com" #property version "1.00" // input long TrPoint = 1; //Балл за транзакцию input long DealPoint = 40; //Балл за сделку // datetime start_day_time; // //+------------------------------------------------------------------+ //| Expert Set start day time function | //+------------------------------------------------------------------+ datetime SetStDayTime() { MqlDateTime dt_str; TimeTradeServer( dt_str ); //--- if ( ( dt_str.day_of_week == 0 ) || ( dt_str.day_of_week == 6 ) ) return( datetime( 0 ) ); //--- string time_str = IntegerToString( dt_str.year ) + "." + IntegerToString( dt_str.mon ) + "." + IntegerToString( dt_str.day ) + " 19:00:00"; ulong cur_day = ulong( StringToTime( time_str ) ); if ( ( dt_str.hour >= 19 ) && ( dt_str.hour <= 23 ) ) { return( StringToTime( time_str ) ); } else { ulong one_day = 24 * 60 * 60; //--- if ( dt_str.day_of_week == 1 ) { cur_day -= one_day * 3; } else { cur_day -= one_day; } return( datetime( cur_day ) ); } return( datetime( 0 ) ); } //+------------------------------------------------------------------+ //| Expert calc deals fee function | //+------------------------------------------------------------------+ double GetExgangeFee( const datetime start_time, long& deals ) { double all_fee = 0.0; ulong deal_ticket; deals = 0; //--- if ( HistorySelect( start_time, TimeTradeServer() ) ) { int deals_total = HistoryDealsTotal(); //--- if ( deals_total > 0 ) { for ( uint i = 0; i < uint( deals_total ); i++ ) { deal_ticket = HistoryDealGetTicket( i ); //--- if ( deal_ticket > 0 ) { ulong order_ticket = ulong( HistoryDealGetInteger( deal_ticket, DEAL_ORDER ) ); if ( order_ticket > 0 ) { deals++; all_fee += HistoryDealGetDouble( deal_ticket, DEAL_COMMISSION ); } } } return( MathAbs( all_fee ) ); } } return( 0 ); } //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { long a_deals; start_day_time = SetStDayTime(); //--- if ( ulong( start_day_time ) == 0 ) { MessageBox( "Не установлено время начала торгового дня!", "Ошибка", MB_OK | MB_ICONHAND ); return( INIT_FAILED ); } Print( "Exgange Fee = ", GetExgangeFee( start_day_time, a_deals ), "; Deals = ", a_deals ); return( INIT_SUCCEEDED ); }
よく使う機能、便利な機能
SetStDayTime()関数は、取引日の開始時刻(要求時点)を返す。
関数 GetExgangeFee()は、取引日(リクエスト時)の取引所手数料と取引回数を返します。
前代未聞の「Hindu Coder - 2015」のタイトル候補です。
SetStDayTime()は2行で解決します。でも、もちろん必要ない...。
マイケルさん、特集ありがとうございました
私による一部の自転車の発明は中止された )
しなければならないのです。
そして、それをどのように行うのか?
時間を数値で表現する作業が必要なんですね。
datetime a=TimeTradeServer();
その日の開始時刻。
datetime r=(a/86400)*86400
本日19:00の時刻。
datetime r=(a/86400)*86400+19*3600;
今日の19:00の時刻が現在の時刻より大きい場合、昨日の19:00が必要です。
if(r>a)r-=86400;
ここでは、週末をスキップする必要がある場合、曜日を 確認し、日曜日なら86400*2、土曜日なら86400を引きます(金曜日を得るため)。
こんな感じです。
その後、表示用に、必要に応じて、文字列に変換する。
TimeToStr(r)
高年は?
さて、あなたの考えを具体的なコードに変換してください。
私の機能をあなた流に書き換えてください!しかも2行で。
うるう年は?すべてうまくいく。
自分でやればいいんです。万が一、私が何か見逃すかもしれないので、あなたのコードを完全に理解したいとは思いませんが、どんな喜びがあるのでしょう。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
こんにちは!
ここでは、FORTS先物市場での推奨事項、バグ、機能、および頻繁に使用される機能を投稿します
重要:トピックを「拡大」しないために、コメントがある場合は、
または質問があります-このセクションで別のトピックを作成します(ここでは回答しません)。
推奨事項:
MQL5 標準ライブラリは、FOREX市場向けに「シャープ化」されているため、
FORTSの専門家の育成私はすべてを自分で書くことをお勧めします。
頻繁に使用される便利な機能:
ブローカーのサーバーの取引パラメーターをチェックする機能。
この関数では、これらのパラメータをチェックする必要があります。
アドバイザーで使用します。次に例を示します。
(OnInit()でのみ使用してください)
使用例:
機器の有効期限が切れるまでの残り日数の取得:
清算を除く「ネット」ポジション価格の取得:
トランザクションをカウントするためのグローバル端末変数の作成:
(OnInit()でのみ使用してください)
端末のグローバル変数への保護された書き込み(トランザクションカウンター):
パラメータup_down=trueの場合、ターミナルのグローバル変数を増やします。
およびその逆。
資金が不足している場合に、ボリュームを自動的に削減して資金をチェックする:
OrderSend()コマンドで成行/指値注文を出す
価格=''0 "の場合-成行注文:
OrderSend()コマンドで注文を削除する
OrderSend()コマンドを使用した保留中の注文
OrderSend()コマンドを使用して保留中の注文を変更する
OrderSendAsync()コマンドを使用して保留中の注文を設定する
このコマンドを使用すると、この結果としてチケットが取得されません
関数ですが、OnTradeTransaction()関数内にあります。 OrderSendAsync()関数では、
注文するリクエストの番号を取得します。
ulong order_ticket = 0;
リクエスト番号でチケットを取得する:
OrderSend()およびOrderSendAsync()関数のエラー(戻りコード)の処理
CheckError()関数が注文送信の実装に追加されました。例:
CheckError()関数自体(例のすべての戻りコードではありません)
続きを見る
特殊性:
ORDER_FILLING_IOC実行を伴うLIMIT注文で複数の契約を購入する場合、
注文が最初のボリュームで満たされている場合、履歴内の注文はORDER_STATE_CANCELEDとして保存できます。
そして2番目は失敗しました。
例:
ORDER_FILLING_IOC実行を伴うLIMIT注文で3つの契約を購入します。
次の状況があります。
1. 3つの契約すべてを購入した場合、履歴内の注文の状態はORDER_STATE_FILLEDになります。
2.何も購入しなかった場合、履歴状態= ORDER_STATE_CANCELED
3.最初の2つの契約(28449)を購入したが、1つの契約(28450)を購入しなかった場合、履歴内の状態= ORDER_STATE_CANCELED
4.最初の2つの契約(28449)を購入せず、1つ(28450)を購入した場合、履歴状態= ORDER_STATE_PARTIAL
=======例の終わり===================
非効率的なトランザクションの数(非効率的なトランザクションとは、トランザクションに至らなかったトランザクションです。
先物市場での注文の発注、変更、削除)FORTSは、完全な取引セッションごとに2000に制限されています
当日の19-00から翌日の18-45まで。超過した場合-取引所の罰金
http://moex.com/n8725
バグ:
1.ブローカーのMT5サーバーまたは取引所で障害が発生した場合、コマンド
delete(modify)既存の注文サーバーは以下を返します。
エラー10013=TRADE_RETCODE_INVALID =無効なリクエスト(無効なリクエスト)
2.場合によっては、失敗したときに、保留中または指値注文を行おうとすると、エラーが発生します-「機器は現在利用できません」
(それはタイプミスではありません、それはメッセージです)
ドキュメントにはトレードサーバーのリターンコードはありません!