[ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 3. - ページ 284 1...277278279280281282283284285286287288289290291...652 新しいコメント costy_ 2011.10.23 11:12 #2831 ZZZEROXXX: UP.EAをスクリプトに変換する原理を簡単に教えてください。 もっとシンプルに言うと、こんな 感じです。 Александр 2011.10.23 11:21 #2832 ZZZEROXXX: UP.EAをスクリプトに変換する原理を簡単に教えてください。 正確にはわかりませんが、EAをスクリプトに移動すれば、スクリプトのように動作するようです。 Всеволод 2011.10.23 12:32 #2833 ZZZEROXXX: UP. EAをスクリプトに変換する原理を簡単に教えてほしい。 そして、スクリプトはどうするのでしょうか? 通常、端末のプラグを抜き、非標準のタイムフレームからCSVファイルを書き出し、任意のシンボルと期間の代わりに、この期間にロードしてテストします。オープニング価格 ではその通りだが、他にあまり選択肢がない。 ZZZEROXXX 2011.10.23 13:48 #2834 splxgf: そして、スクリプトはどうするのでしょうか? 通常、端末のプラグを抜き、非標準のタイムフレームからCSVファイルを書き出し、任意のシンボルと期間の代わりにロードし、これがテストの対象となる期間となる。オープニング価格ではその通りだが、他にあまり選択肢がない。 ご回答いただいた皆様、ありがとうございました。TFを代用したバリエーションはいいですね、試してみます。当初は、非標準のTFスタンドアロンを開き、Expert Advisorのスクリプトを使ってトレードをファイルにアンロードする予定でした。 Evgeny Potapov 2011.10.23 14:13 #2835 何がですか。 最大ドローダウン率、%- 最大ドローダウン率。 ? ストラテジーオプティマイザーでこのようなパラメータを指定できるのですが、その意味がよくわかりません...。 1) 最初の入金額と比較して、残高が最大に減少することですか? 2) 互いに続く株式の最大値と最小値の差は最大か? 3) 最小マージンと最大マージンの違いは? 他にもさまざまなバリエーションが思い浮かびます。 最大ドローダウン 率」の正確な意味を教えてください。 Ruslana 2011.10.23 14:26 #2836 snail09: コードを理解し始めた。驚きました。添付されているものは動作しません。断片的に構成されているのがわかると思いますが、少なくともブラケットは正しいです。 コードは2つに分かれています。 これは私の専門家です。ぜひご覧ください。 //+------------------------------------------------------------------+ //| rusa_v4.mq4 | //| //| | //+------------------------------------------------------------------+ #property copyright "" #property link "https://www.mql5.com/ru/users/avoitenko" //--- Внешние переменные extern string General = "=== General settings ==="; extern int TakeProfit_Buy = 260; // Тейк профит для Buy extern int StopLoss_Buy = 120; // Стоп лосс для Buy extern int TakeProfit_Sell = 140; // Тейк профит для Sell extern int StopLoss_Sell = 110; // Стоп лосс для Sell extern int TrailingStop = 0; // Трейлинг стоп extern double Lots = 0.02; // Лот extern int Slippage = 10; // Проскальзывание extern int BarsShift = 0; // Смещение в барах для анализа сигнала extern int Magic = 555; // Уникальный номер советника extern string MA1 = "=== #1 Moving Average settings ==="; extern int MA1_period = 15; // Период скользящей средней extern int MA1_shift = 0; // Смещение скользящей средней extern int MA1_method = 1; // MODE_SMA=0,MODE_EMA=1,MODE_SMMA=2,MODE_LWMA =3; extern int MA1_price = 2; // PRICE_CLOSE=0,PRICE_OPEN=1,PRICE_HIGH=2,PRICE_LOW=3,PRICE_MEDIAN=4,PRICE_TYPICAL=5,PRICE_WEIGHTED=6; extern string MA2 = "=== #2 Moving Average settings ==="; extern int MA2_period = 20; extern int MA2_shift = 0; extern int MA2_method = 0; extern int MA2_price = 0; extern string MA3 = "=== #3 Moving Average settings ==="; extern int MA3_period = 70; extern int MA3_shift = 8; extern int MA3_method = 2; extern int MA3_price = 3; extern string RSI = "=== RSI settings ==="; extern int RSI_period = 14; // Период RSI extern int RSI_price = 3; // PRICE_CLOSE=0,PRICE_OPEN=1,PRICE_HIGH=2,PRICE_LOW=3,PRICE_MEDIAN=4,PRICE_TYPICAL=5,PRICE_WEIGHTED=6; extern int macd_fast = 12; extern int macd_slow = 15; extern int macd_signal = 1; extern int macd_price = 3; // 0-PRICE_CLOSE, 1-PRICE_OPEN, 2-PRICE_HIGH, 3-PRICE_LOW, 4-PRICE_MEDIAN, 5-PRICE_TYPICAL, 6-PRICE_WEIGHTED extern int macd_open = 7; //--- Глобальные переменные double lot; // лот double ma10,ma20,ma30,ma11,ma21,ma31,rsi, macd; int stop_loss_buy; // стоп лосс int take_profit_buy; // тейк профит int stop_loss_sell; // стоп лосс int take_profit_sell; // тейк профит int slippage; // проскальзывание int trailing_stop; // трейлинг стоп int min_level; // минимальный отступ от цены для установки SL / TP int bars_shift; // смещение в барах для торговых сигналов int bars_count; // минимальное число баров для работы datetime candle_time = 0; bool sell_open = false; // флаг открытия позиции sell bool buy_open = false; // флаг открытия позиции buy bool new_bar_buy = false; // флаг нового бара bool new_bar_sell = false; // флаг нового бара //+------------------------------------------------------------------+ int init() //+------------------------------------------------------------------+ { //--- проверка правильности ввода данных bars_shift = BarsShift; if(bars_shift < 0)bars_shift = 0; bars_count = MathMax4(MA1_period, MA2_period, MA3_period, RSI_period) + bars_shift; //--- инициализация переменных stop_loss_buy = StopLoss_Buy; take_profit_buy = TakeProfit_Buy; stop_loss_sell = StopLoss_Sell; take_profit_sell = TakeProfit_Sell; slippage = Slippage; trailing_stop = TrailingStop; //--- Если цена состоит из 3-x / 5-и цифр if((Digits==3) || (Digits==5)) { stop_loss_buy = stop_loss_buy * 10; take_profit_buy = take_profit_buy * 10; stop_loss_sell = stop_loss_sell * 10; take_profit_sell = take_profit_sell * 10; slippage = slippage * 10; trailing_stop = trailing_stop * 10; } Print("Советник начал свою работу"); return(0); } bool macd_up(int timeframe, int fast, int slow, int signal, int price, int num) { double y; double x = iMACD(NULL,timeframe,fast,slow,signal,price,MODE_MAIN,0)*100000; for (int i=1; i<num; i++) { y = iMACD(NULL,timeframe,fast,slow,signal,price,MODE_MAIN,i)*100000; if (y > x) return(false); else x = y; } return(true); } //+------------------------------------------------------------------+ bool macd_down(int timeframe, int fast, int slow, int signal, int price, int num) { double y; double x = iMACD(NULL,timeframe,fast,slow,signal,price,MODE_MAIN,0)*100000; for (int i=1; i<num; i++) { y = iMACD(NULL,timeframe,fast,slow,signal,price,MODE_MAIN,i)*100000; if (y < x) return(false); else x = y; } return(true); } //+------------------------------------------------------------------+ int deinit() //+------------------------------------------------------------------+ { Print("Советник завершил свою работу"); return(0); } //+------------------------------------------------------------------+ int start() //+------------------------------------------------------------------+ { //--- Разрешение на открытие позиций - каждую свечу if(candle_time != Time[0]) { candle_time = Time[0]; new_bar_buy = true; new_bar_sell = true; } if (Bars < bars_count){Print("Мало данных для работы"); return(0);} //--- Получение значений индикатора iMA ma10 = iMA ( Symbol(), Period(), MA1_period, MA1_shift, MA1_method, MA1_price, bars_shift); ma20 = iMA ( Symbol(), Period(), MA2_period, MA2_shift, MA2_method, MA2_price, bars_shift); ma30 = iMA ( Symbol(), Period(), MA3_period, MA3_shift, MA3_method, MA3_price, bars_shift); ma11 = iMA ( Symbol(), Period(), MA1_period, MA1_shift, MA1_method, MA1_price, bars_shift+1); ma21 = iMA ( Symbol(), Period(), MA2_period, MA2_shift, MA2_method, MA2_price, bars_shift+1); rsi = iRSI ( Symbol(), Period(), RSI_period, RSI_price, bars_shift); macd = iMACD(NULL,0,macd_fast,macd_slow,macd_signal,macd_price,MODE_MAIN,0); { if (macd <0) { if (macd_down(0,macd_fast,macd_slow,macd_signal,macd_price,macd_open)) return(true); { //--- Условие для продажи if(ma11 < ma21 && ma10 > ma20 && ma30 > ma10 && rsi<50 && new_bar_sell) { sell_open=true; new_bar_sell = false; } } } } { if (macd > 0) { if (macd_up(0,macd_fast,macd_slow,macd_signal,macd_price,macd_open)) return(true); { //--- Условие для продажи if(ma11 > ma21 && ma10 < ma20 && ma30 < ma10 && rsi>50 && new_bar_buy) { buy_open=true; new_bar_buy = false; } } } } { if (macd > 0) { if (macd_up(0,macd_fast,macd_slow,macd_signal,macd_price,macd_open)) return(true); { //--- Условие для покупки if(ma11 < ma21 && ma10 > ma20 && ma30 > ma10 && rsi>50 && new_bar_buy) { buy_open=true; new_bar_buy = false; } } } { if (macd < 0) { if (macd_down(0,macd_fast,macd_slow,macd_signal,macd_price,macd_open)) return(true); { //--- Условие для продажи if(ma11 > ma21 && ma10 < ma20 && ma30 < ma10 && rsi<50 && new_bar_sell) { sell_open=true; new_bar_sell = false; } } } } } //--- выставление рыночных ордеров if(IsTradeAllowed()) { Trade_BUY(); Trade_SELL(); } return(0); } Ruslana 2011.10.23 14:29 #2837 rusa: 後編 //+------------------------------------------------------------------+ void Trade_BUY() //+------------------------------------------------------------------+ { for ( int i = 0; i < OrdersTotal(); i++ ) { if ( OrderSelect( i, SELECT_BY_POS, MODE_TRADES ) ) { if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != Magic)) continue; //не наш ордер if ( OrderType() == OP_BUY) // если ордер OP_BUY { min_level = MarketInfo( Symbol(), MODE_STOPLEVEL ); //--- проверка на работу трейлинг стопа if (trailing_stop !=0.0 && Ask > NormalizeDouble(OrderStopLoss() + (stop_loss_buy + MathMax(min_level, trailing_stop)) * Point, Digits) && OrderProfit() > 0) { if ( OrderModify ( OrderTicket(), OrderOpenPrice(), NormalizeDouble (OrderStopLoss() + MathMax(min_level, trailing_stop) * Point, Digits), OrderTakeProfit(), 0, CLR_NONE)) { Print("Сработал трейлинг стоп для Buy"); } else { Print ("Ошибка модификации ордера #", GetLastError()); } RefreshRates(); Sleep(3000); } //end modify }// end BUY }//end OrderSelect else { Print( "OrderSelect ошибка #", GetLastError() ); Sleep(3000); RefreshRates(); return; } }// end for //--- Открываем ордер если есть сигнал while (buy_open) { //--- нормализация лота lot = Normalize_Lot(Lots); //--- проверка на наличие свободной маржи if( AccountFreeMarginCheck(Symbol(),OP_BUY, lot) <= 0 || GetLastError() == 134 ) { Print("Недостаточно свободной маржи для открытия ордера"); buy_open = false; break; } min_level = MarketInfo( Symbol(), MODE_STOPLEVEL ); if ( OrderSend( Symbol(), OP_BUY, lot, NormalizeDouble(Ask, Digits), slippage, NormalizeDouble(Bid - MathMax(stop_loss_buy, min_level) * Point, Digits), NormalizeDouble(Bid + MathMax(take_profit_buy,min_level) * Point, Digits), DoubleToStr(Magic, 0), Magic, 0, Blue) > 0 ) { PlaySound("Wait.wav"); buy_open = false; // ордер открыт break; } else { int Error = GetLastError(); // Не получилось :( switch(Error) // Преодолимые ошибки { case 138:Alert("Ошибка: ",Error," Новые цены."); RefreshRates(); continue; case 135:Alert("Ошибка: ",Error," Цена изменилась."); RefreshRates(); continue; case 136:Alert("Нет цен."); while(RefreshRates() == false) Sleep(500); continue; case 146:Alert("Подсистема торговли занята."); Sleep(500); RefreshRates(); continue; default: Alert("Возникла ошибка ", Error," Выход из подпрограммы."); // Другие варианты ошибок }// end switch }// end else break; }// end while }// end Trade_BUY //+------------------------------------------------------------------+ void Trade_SELL() //+------------------------------------------------------------------+ { for ( int i = 0; i < OrdersTotal(); i++ ) { if ( OrderSelect( i, SELECT_BY_POS, MODE_TRADES ) ) { if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != Magic)) continue; //не наш ордер if ( OrderType() == OP_SELL) //если ордер OP_SELL { min_level = MarketInfo( Symbol(), MODE_STOPLEVEL ); //--- проверка на работу трейлинг стопа if (trailing_stop !=0.0 && Bid < NormalizeDouble(OrderStopLoss() - (stop_loss_sell + MathMax(min_level, trailing_stop)) * Point, Digits)&&OrderProfit() > 0) { if ( OrderModify ( OrderTicket(), OrderOpenPrice(), NormalizeDouble (OrderStopLoss() - MathMax(min_level, trailing_stop) * Point, Digits), OrderTakeProfit(), 0, CLR_NONE)) { Print("Сработал трейлинг стоп для Sell"); } else { Print ( "Ошибка модификации ордера #", GetLastError()); } RefreshRates(); Sleep(3000); } }// end BUY }//end OrderSelect else { Print( "OrderSelect ошибка #", GetLastError() ); Sleep(3000); RefreshRates(); return; } }// end for //--- Открываем ордер если есть сигнал while (sell_open) { //--- нормализация лота lot = Normalize_Lot(Lots); //--- проверка на наличие свободной маржи if( AccountFreeMarginCheck(Symbol(),OP_SELL, lot) <= 0 || GetLastError() == 134 ) { Print("Недостаточно свободной маржи для открытия ордера"); sell_open = false; break; } min_level = MarketInfo( Symbol(), MODE_STOPLEVEL ); if ( OrderSend( Symbol(), OP_SELL, lot, NormalizeDouble(Bid, Digits), slippage, NormalizeDouble(Ask + MathMax(stop_loss_sell, min_level) * Point, Digits), NormalizeDouble(Ask - MathMax(take_profit_sell, min_level) * Point, Digits), DoubleToStr(Magic, 0), Magic, 0, Red) > 0 ) { PlaySound("Wait.wav"); sell_open = false; // ордер открыт break; } else { int Error = GetLastError(); // Не получилось :( switch(Error) // Преодолимые ошибки { case 138:Alert("Ошибка: ",Error," Новые цены."); RefreshRates(); continue; case 135:Alert("Ошибка: ",Error," Цена изменилась."); RefreshRates(); continue; case 136:Alert("Нет цен."); while(RefreshRates() == false) Sleep(500); continue; case 146:Alert("Подсистема торговли занята."); Sleep(500); RefreshRates(); continue; default: Alert("Возникла ошибка ", Error," Выход из подпрограммы."); // Другие варианты ошибок }// end switch }// end else break; }// end while }// end Trade_SELL //+------------------------------------------------------------------+ double Normalize_Lot(double lot)// Проверка на допустимое значение лота //+------------------------------------------------------------------+ { double lot_min = MarketInfo(Symbol(), MODE_MINLOT); double lot_max = MarketInfo(Symbol(), MODE_MAXLOT); double lot_step = MarketInfo(Symbol(), MODE_LOTSTEP); if ( lot <= lot_min ) lot = lot_min; // минимальный else if ( lot >= lot_max ) lot = lot_max; // максимальный else lot = MathFloor( lot / lot_step ) * lot_step ; // округление до ближайшего меньшего return(lot); } //+------------------------------------------------------------------+ int MathMax4(int i1,int i2,int i3,int i4)// Возврат максимального значения //+------------------------------------------------------------------+ { int imax=i1; if(i2>imax)imax=i2; if(i3>imax)imax=i3; if(i4>imax)imax=i4; return(imax); } 削除済み 2011.10.23 15:48 #2838 保留中の注文がトリガーされた場合、保留中の注文を削除 する方法を教えてください。合計2つの保留注文が設定されています。 Boris 2011.10.23 16:00 #2839 ArgentumZ:こんにちは。テスターでEAを実行する。サーバーは4桁です。ログに売買注文を出すと、次のように表示されます。2011.10.23 15:27:26 2010.12.16 06:16 test_sovetnik GBPUSD,H1: open #1 buy 0.10 GBPUSD at 1.5551 sl: 1.4551 tp: 1.5586 ok.しかし、1.55512でオープン !5桁で。そして、保留中の注文は4桁で発注され、同様に4桁でトリガーされる。しかし、OP_SELLとOP_BUYは5桁しか開かない!?NormalizeDouble(Ask,Digits)を行っています。何も動かない!?この問題を解決する方法を教えてください。もちろん、下1桁は無視してもかまいません。エラーは発生しませんが、実験の純度を高めるために、すべてのトレードを4桁で行ってほしいのです。 ほとんどの場合、あなたのMT4とサーバーは、私のように5桁の引用符を使用しています。つまり、Digits=5として、すべて10倍する必要があるのです。 Cmu4 2011.10.23 16:09 #2840 Parn25: 注文の1つがトリガーされた場合、保留中の注文を削除するにはどうすればよいですか?合計で2つの注文が設定されています。 手動で行うことができます。右クリックで...:) スクリプトやExpert Advisorを適用することができます。どちらがお好みですか?XD 1...277278279280281282283284285286287288289290291...652 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
UP.EAをスクリプトに変換する原理を簡単に教えてください。
UP.EAをスクリプトに変換する原理を簡単に教えてください。
正確にはわかりませんが、EAをスクリプトに移動すれば、スクリプトのように動作するようです。
UP. EAをスクリプトに変換する原理を簡単に教えてほしい。
そして、スクリプトはどうするのでしょうか?
通常、端末のプラグを抜き、非標準のタイムフレームからCSVファイルを書き出し、任意のシンボルと期間の代わりに、この期間にロードしてテストします。オープニング価格 ではその通りだが、他にあまり選択肢がない。
そして、スクリプトはどうするのでしょうか?
通常、端末のプラグを抜き、非標準のタイムフレームからCSVファイルを書き出し、任意のシンボルと期間の代わりにロードし、これがテストの対象となる期間となる。オープニング価格ではその通りだが、他にあまり選択肢がない。
ご回答いただいた皆様、ありがとうございました。TFを代用したバリエーションはいいですね、試してみます。当初は、非標準のTFスタンドアロンを開き、Expert Advisorのスクリプトを使ってトレードをファイルにアンロードする予定でした。
何がですか。
最大ドローダウン率、%- 最大ドローダウン率。
ストラテジーオプティマイザーでこのようなパラメータを指定できるのですが、その意味がよくわかりません...。
1) 最初の入金額と比較して、残高が最大に減少することですか?
2) 互いに続く株式の最大値と最小値の差は最大か?
3) 最小マージンと最大マージンの違いは?
他にもさまざまなバリエーションが思い浮かびます。
最大ドローダウン 率」の正確な意味を教えてください。
コードを理解し始めた。驚きました。添付されているものは動作しません。断片的に構成されているのがわかると思いますが、少なくともブラケットは正しいです。
コードは2つに分かれています。 これは私の専門家です。ぜひご覧ください。
後編
こんにちは。
テスターでEAを実行する。サーバーは4桁です。ログに売買注文を出すと、次のように表示されます。
2011.10.23 15:27:26 2010.12.16 06:16 test_sovetnik GBPUSD,H1: open #1 buy 0.10 GBPUSD at 1.5551 sl: 1.4551 tp: 1.5586 ok.
しかし、1.55512でオープン !5桁で。そして、保留中の注文は4桁で発注され、同様に4桁でトリガーされる。しかし、OP_SELLとOP_BUYは5桁しか開かない!?
NormalizeDouble(Ask,Digits)を行っています。
何も動かない!?この問題を解決する方法を教えてください。
もちろん、下1桁は無視してもかまいません。エラーは発生しませんが、実験の純度を高めるために、すべてのトレードを4桁で行ってほしいのです。
ほとんどの場合、あなたのMT4とサーバーは、私のように5桁の引用符を使用しています。つまり、Digits=5として、すべて10倍する必要があるのです。
注文の1つがトリガーされた場合、保留中の注文を削除するにはどうすればよいですか?合計で2つの注文が設定されています。
手動で行うことができます。右クリックで...:)
スクリプトやExpert Advisorを適用することができます。どちらがお好みですか?XD