MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1865 1...185818591860186118621863186418651866186718681869187018711872...1953 新しいコメント GlaVredFX 2022.01.17 21:52 #18641 Mihail Matkovskij #:そうではないんですけどね。の結果を記録しておく必要があります。またはOnTradeTransactionに新しい関数を作成します。そして、ポジションがない場合は、エントリーしてください。または、例で 示したようにbuySignalやsellSignalに シグナルを書き込んでOnTimerで処理 する。 ClosePosWithMaxProfitInCurrency この機能はもう必要ありません。不向きです。その代わりに、最初に開いた1つの注文を閉じる関数があれば、それを代入する必要があります。 グローバルスコープに書かれて いるbuySignalとsellSignalの 変数が よくわかりません。しかし、コンパイルしようとすると、以下のエラーが発生します。 'sellSignal' - some operator expected expression has no effect 'buySignal' - some operator expected expression has no effect Maksim Burov 2022.01.18 03:51 #18642 Andrey Sokolov #:https://book.mql4.com/ru/trading/orderclose こんにちは。 確かに全部読みましたし、各オーダーを別々に書き出すことも可能ですが、問題はコードを短くすることでした。 Shockeir 2022.01.18 09:06 #18643 こんにちは、同僚たち!初心者にアドバイスお願いします!前のバーからではなく、インジケータの現在の値(その時)を取得する方法を教えてください。Expert Advisor は前のバーが終了したときのみトリガーされますが、もっと早くトリガーさせる必要があります。 Andrei Sokolov 2022.01.18 09:25 #18644 makssub #:こんにちは。確かに全部読みましたし、各オーダーを別々に書き出すことも可能ですが、問題はコードを短くすることでした。 コード短縮がうまくいかないとは、具体的にどのようなことでしょうか? Andrei Sokolov 2022.01.18 09:27 #18645 Shockeir #: こんにちは、初心者のために、前のバーの値ではなく、指標の現在の値(現時点)を取得する方法を教えてください。EAは前のバーが終了したときのみトリガーされますが、私はその前にトリガーする必要があります。 おそらく、状況や何がうまくいっていないのかをより詳細に説明することで、より多くの結果を得られるでしょう。 Shockeir 2022.01.18 09:38 #18646 Andrey Sokolov #:おそらく、状況やあなた自身ができないことをより詳細に説明することで、より多くの結果が得られるでしょう。 指標は標準的なストキャスティクスです。エキスパートアドバイザーは、KラインとDラインの交点でトリガーされるはずです。新しいバーが表示されるまでの交差点では、何も起こりません。新しいバーが現れたとき、まだ条件が満たされていれば、アクションが発生します。私が理解する限り、インジケータのバッファの最後の値は、最後に完了したバーで計算された値であるためです。そこで、未完成のバーでトリガーがかかるようにしたいのです。 Andrei Sokolov 2022.01.18 09:49 #18647 Shockeir #:指標は標準的なストキャスティクスです。エキスパートアドバイザーは、K線とD線の交点でトリガーされる必要があります。まさに交差点で、新しいバーが現れるまで、何も起こらないのです。新しいバーが表示されると同時に、まだ条件が満たされていれば、アクションが発生します。私が理解する限り、インジケータのバッファの最後の値は、最後に完了したバーで計算された値であるためです。そこで、未完成のバーでアクションが発生するようにしたいと思います。 最後のローソク足の指数は0です。 では、この問題を解決するために、どのような工夫をされたのでしょうか。ヘルプは読まれましたか?具体的に何がうまくいっていないのでしょうか? Shockeir 2022.01.18 09:55 #18648 Andrey Sokolov #:コードを入れられるか?せめて何語かはっきりさせろよ。 //+------------------------------------------------------------------+ //| ProjectName | //| Copyright 2020, CompanyName | //| http://www.companyname.net | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //--- input parameters input double crossDepthOpen=7; //Глубина пересечения K и D для открытия input double crossDepthClose=-2; //Глубина пересечения K и D для закрытия input double closeCoef=5; //Коэффициент изменения глубины закрытия input int k_period=8; //Период K input int d_period=3; //Период В input int slowing=3; //Сглаживание input double tp_1=20; //Тейк input double sl_1=60; //Лосс input double maxPos=2.0; //Размер лота int stoch_handle; double k_buffer[1]; double d_buffer[1]; double TKP; double STL; double CDO; double CDC; int lossCount=0; int profitCount=0; int EA_magic=12345; //| Expert initialization function //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnInit() { TKP=tp_1; STL=sl_1; stoch_handle=iStochastic(_Symbol,PERIOD_CURRENT,k_period,d_period,slowing,MODE_EMA,STO_LOWHIGH); if(stoch_handle<0) { Alert("Ошибка при создании индикаторов ",GetLastError()); return(0); } return(INIT_SUCCEEDED); } //| Expert tick function //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnTick() { CDO=crossDepthOpen; CDC=crossDepthClose; MqlTick latestPrice; MqlTradeResult mResult; MqlTradeRequest mRequest; ZeroMemory(mRequest); SymbolInfoTick(_Symbol,latestPrice); ArraySetAsSeries(k_buffer,true); ArraySetAsSeries(d_buffer,true); if(CopyBuffer(stoch_handle,0,0,1,k_buffer)<0) { Alert("Не удалось скопировать в буфер K",GetLastError()); return; } if(CopyBuffer(stoch_handle,1,0,1,d_buffer)<0) { Alert("Не удалось скопировать в буфер D",GetLastError()); return; } bool buyFullOpened=false; bool buyPartOpened=false; bool sellFullOpened=false; bool sellPartOpened=false; //Состояние позиций if(PositionSelect(_Symbol)==true) { if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) { if(PositionGetDouble(POSITION_VOLUME)>=maxPos) { buyFullOpened=true; } else { buyPartOpened=true; } } else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL) { if(PositionGetDouble(POSITION_VOLUME)>=maxPos) { sellFullOpened=true; } else { sellPartOpened=true; } } } //состояние позиций конец //Условия изменения позиций bool buyOpenCondition=k_buffer[0]>((d_buffer[0])+CDO); bool buyCloseCondition=k_buffer[0]<((d_buffer[0])-CDC); bool buyTPCondition=latestPrice.bid>(PositionGetDouble(POSITION_PRICE_OPEN)+TKP*_Point); bool buySLCondition=latestPrice.bid<(PositionGetDouble(POSITION_PRICE_OPEN)-STL*_Point); bool sellOpenCondition=k_buffer[0]<((d_buffer[0])-CDO); bool sellCloseCondition=k_buffer[0]>((d_buffer[0])+CDC); bool sellTPCondition=latestPrice.ask<(PositionGetDouble(POSITION_PRICE_OPEN)-TKP*_Point); bool sellSLCondition=latestPrice.ask>(PositionGetDouble(POSITION_PRICE_OPEN)+STL*_Point); //Условия изменения позиций конец //Проверка и выполнение действий if(buyOpenCondition) { if(!buyFullOpened && !buyPartOpened && !sellPartOpened && !sellFullOpened) { Print("Покупка по сигналу"); Print("Текущий объем позиций ",PositionGetDouble(POSITION_VOLUME)); mRequest.action = TRADE_ACTION_DEAL; mRequest.symbol = _Symbol; mRequest.price = NormalizeDouble(latestPrice.ask,_Digits); mRequest.sl = 0; //NormalizeDouble(latestPrice.ask - STL*Point(),_Digits); mRequest.tp = 0; //NormalizeDouble(latestPrice.ask + TKP*_Point,_Digits); mRequest.magic = EA_magic; mRequest.type = ORDER_TYPE_BUY; mRequest.type_filling = ORDER_FILLING_FOK; mRequest.deviation=100; mRequest.volume = maxPos; OrderSend(mRequest,mResult); Print("Открыто ",PositionGetDouble(POSITION_VOLUME)," по ", PositionGetDouble(POSITION_PRICE_OPEN)); } } //Условия покупки if(sellTPCondition) { if(sellFullOpened) { Print("Тейк-профит шорта"); Print("Текущий объем позиций ",PositionGetDouble(POSITION_VOLUME)); Print("Цена открытия ", PositionGetDouble(POSITION_PRICE_OPEN)); mRequest.action = TRADE_ACTION_DEAL; mRequest.symbol = _Symbol; mRequest.price = NormalizeDouble(latestPrice.ask,_Digits); mRequest.sl = 0;//NormalizeDouble(latestPrice.ask - STL*_Point,_Digits); mRequest.tp = 0;//NormalizeDouble(latestPrice.ask + TKP*_Point,_Digits); mRequest.magic = EA_magic; mRequest.type = ORDER_TYPE_BUY; mRequest.type_filling = ORDER_FILLING_FOK; mRequest.deviation=100; mRequest.volume = MathRound(PositionGetDouble(POSITION_VOLUME)/2); OrderSend(mRequest,mResult); ++profitCount; Print("Текущий объем позиций ",PositionGetDouble(POSITION_VOLUME)); } } if(sellSLCondition) { if(sellFullOpened || sellPartOpened) { Print("Стоп-лосс шорта"); Print("Текущий объем позиций ",PositionGetDouble(POSITION_VOLUME)); Print("Цена открытия ", PositionGetDouble(POSITION_PRICE_OPEN)); mRequest.action = TRADE_ACTION_DEAL; mRequest.symbol = _Symbol; mRequest.price = NormalizeDouble(latestPrice.ask,_Digits); mRequest.sl = 0;//NormalizeDouble(latestPrice.ask - STL*_Point,_Digits); mRequest.tp = 0;//NormalizeDouble(latestPrice.ask + TKP*_Point,_Digits); mRequest.magic = EA_magic; mRequest.type = ORDER_TYPE_BUY; mRequest.type_filling = ORDER_FILLING_FOK; mRequest.deviation=100; mRequest.volume = PositionGetDouble(POSITION_VOLUME); OrderSend(mRequest,mResult); ++lossCount; Print("Текущий объем позиций ",PositionGetDouble(POSITION_VOLUME)); } } if(sellCloseCondition) { if(sellFullOpened || sellPartOpened) { Print("Закрытие шорта по сигналу"); Print("Текущий объем позиций ",PositionGetDouble(POSITION_VOLUME)); Print("Цена открытия ", PositionGetDouble(POSITION_PRICE_OPEN)); Print(k_buffer[0]," ",d_buffer[0]); mRequest.action = TRADE_ACTION_DEAL; mRequest.symbol = _Symbol; mRequest.price = NormalizeDouble(latestPrice.ask,_Digits); mRequest.sl = 0;//NormalizeDouble(latestPrice.ask - STL*_Point,_Digits); mRequest.tp = 0;//NormalizeDouble(latestPrice.ask + TKP*_Point,_Digits); mRequest.magic = EA_magic; mRequest.type = ORDER_TYPE_BUY; mRequest.type_filling = ORDER_FILLING_FOK; mRequest.deviation=100; mRequest.volume = PositionGetDouble(POSITION_VOLUME); OrderSend(mRequest,mResult); Print("Текущий объем позиций ",PositionGetDouble(POSITION_VOLUME)); } } //Условия продажи if(sellOpenCondition) { if(!sellFullOpened && !buyPartOpened && !sellPartOpened && !buyFullOpened) { Print("Продажа по сигналу"); Print("Текущий объем позиций ",PositionGetDouble(POSITION_VOLUME)); Print("Цена открытия ", PositionGetDouble(POSITION_PRICE_OPEN)); Print(k_buffer[0]," ",d_buffer[0]); mRequest.action = TRADE_ACTION_DEAL; mRequest.symbol = _Symbol; mRequest.price = NormalizeDouble(latestPrice.bid,_Digits); mRequest.sl = 0; //NormalizeDouble(latestPrice.bid + STL*_Point,_Digits); mRequest.tp = 0; //NormalizeDouble(latestPrice.bid - TKP*_Point,_Digits); mRequest.magic = EA_magic; mRequest.type = ORDER_TYPE_SELL; mRequest.type_filling = ORDER_FILLING_FOK; mRequest.deviation=100; mRequest.volume = maxPos; OrderSend(mRequest,mResult); Print("Текущий объем позиций ",PositionGetDouble(POSITION_VOLUME)); } } if(buyTPCondition) { if(buyFullOpened) { Print("Тейк-профит лонга"); Print("Текущий объем позиций ",PositionGetDouble(POSITION_VOLUME)); Print("Цена открытия ", PositionGetDouble(POSITION_PRICE_OPEN)); mRequest.action = TRADE_ACTION_DEAL; mRequest.symbol = _Symbol; mRequest.price = NormalizeDouble(latestPrice.bid,_Digits); mRequest.sl = 0;//NormalizeDouble(latestPrice.bid + STL*_Point,_Digits); mRequest.tp = 0;//NormalizeDouble(latestPrice.bid - TKP*_Point,_Digits); mRequest.magic = EA_magic; mRequest.type = ORDER_TYPE_SELL; mRequest.type_filling = ORDER_FILLING_FOK; mRequest.deviation=100; mRequest.volume = MathRound(PositionGetDouble(POSITION_VOLUME)/2); OrderSend(mRequest,mResult); ++profitCount; Print("Текущий объем позиций ",PositionGetDouble(POSITION_VOLUME)); } } if(buySLCondition) { if(buyFullOpened || buyPartOpened) { Print("Стоп-лосс лонга"); Print("Текущий объем позиций ",PositionGetDouble(POSITION_VOLUME)); Print("Цена открытия ", PositionGetDouble(POSITION_PRICE_OPEN)); Print(k_buffer[0]," ",d_buffer[0]); mRequest.action = TRADE_ACTION_DEAL; mRequest.symbol = _Symbol; mRequest.price = NormalizeDouble(latestPrice.bid,_Digits); mRequest.sl = 0;//NormalizeDouble(latestPrice.bid + STL*_Point,_Digits); mRequest.tp = 0;//NormalizeDouble(latestPrice.bid - TKP*_Point,_Digits); mRequest.magic = EA_magic; mRequest.type = ORDER_TYPE_SELL; mRequest.type_filling = ORDER_FILLING_FOK; mRequest.deviation=100; mRequest.volume = PositionGetDouble(POSITION_VOLUME); OrderSend(mRequest,mResult); ++lossCount; Print("Текущий объем позиций ",PositionGetDouble(POSITION_VOLUME)); } } if(buyCloseCondition) { if(buyFullOpened || buyPartOpened) { Print("Закрытие лонга по сигналу"); Print("Текущий объем позиций ",PositionGetDouble(POSITION_VOLUME)); Print("Цена открытия ", PositionGetDouble(POSITION_PRICE_OPEN)); Print(k_buffer[0]," ",d_buffer[0]); mRequest.action = TRADE_ACTION_DEAL; mRequest.symbol = _Symbol; mRequest.price = NormalizeDouble(latestPrice.bid,_Digits); mRequest.sl = 0;//NormalizeDouble(latestPrice.bid + STL*_Point,_Digits); mRequest.tp = 0;//NormalizeDouble(latestPrice.bid - TKP*_Point,_Digits); mRequest.magic = EA_magic; mRequest.type = ORDER_TYPE_SELL; mRequest.type_filling = ORDER_FILLING_FOK; mRequest.deviation=100; mRequest.volume = PositionGetDouble(POSITION_VOLUME); OrderSend(mRequest,mResult); Print("Текущий объем позиций ",PositionGetDouble(POSITION_VOLUME)); } } } //+------------------------------------------------------------------+ //| Trade function | //+------------------------------------------------------------------+ void OnTrade() { //--- } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- IndicatorRelease(stoch_handle); Print("loss ",lossCount); Print("profit ",profitCount); } //+------------------------------------------------------------------+ Andrey Sokolov(アンドレイ・ソコロフ) #: コードを入れられるか?せめて何語でやってるのかはっきりさせろよ。 Mihail Matkovskij 2022.01.18 10:09 #18649 トレーディング、自動売買システム、ストラテジーテストに関するフォーラム MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 GlaVredFX, 2022.01.17 22:52 ClosePosWithMaxProfitInCurrency この機能はもう使わないでください。関係ありません。この関数が存在する場合、最初に開いたオーダーを閉じる関数に置き換える必要があります。 グローバルレベルで規定されている 変数buySignalとsellSignalが よくわかりません。しかし、コンパイルしようとすると、以下のエラーが発生します。 'sellSignal' - some operator expected expression has no effect 'buySignal' - some operator expected expression has no effect どのように登録したのか、コンパイラはどこに干渉するのか?推して知るべしです。ソースコードがないと理解できない。 Andrei Sokolov 2022.01.18 10:14 #18650 Shockeir #: こんにちは、初心者のために、前のバーの値ではなく、インジケータの現在の値( 現時点)を取得する方法を教えてください。EAは前のバーが終了したときにしかトリガーしないので、もっと早くトリガーする必要があります。 k_buffer[0]とd_buffer[0]の配列には、最新のインジケータの値が格納される。出力して自分で見ることの何が問題なのでしょうか? 1...185818591860186118621863186418651866186718681869187018711872...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
そうではないんですけどね。の結果を記録しておく必要があります。
またはOnTradeTransactionに新しい関数を作成します。そして、ポジションがない場合は、エントリーしてください。または、例で 示したようにbuySignalやsellSignalに シグナルを書き込んでOnTimerで処理 する。
この機能はもう必要ありません。不向きです。その代わりに、最初に開いた1つの注文を閉じる関数があれば、それを代入する必要があります。
グローバルスコープに書かれて いるbuySignalとsellSignalの 変数が よくわかりません。しかし、コンパイルしようとすると、以下のエラーが発生します。
https://book.mql4.com/ru/trading/orderclose
こんにちは。
確かに全部読みましたし、各オーダーを別々に書き出すことも可能ですが、問題はコードを短くすることでした。
こんにちは。
確かに全部読みましたし、各オーダーを別々に書き出すことも可能ですが、問題はコードを短くすることでした。
コード短縮がうまくいかないとは、具体的にどのようなことでしょうか?
こんにちは、初心者のために、前のバーの値ではなく、指標の現在の値(現時点)を取得する方法を教えてください。EAは前のバーが終了したときのみトリガーされますが、私はその前にトリガーする必要があります。
おそらく、状況や何がうまくいっていないのかをより詳細に説明することで、より多くの結果を得られるでしょう。
おそらく、状況やあなた自身ができないことをより詳細に説明することで、より多くの結果が得られるでしょう。
指標は標準的なストキャスティクスです。エキスパートアドバイザーは、KラインとDラインの交点でトリガーされるはずです。新しいバーが表示されるまでの交差点では、何も起こりません。新しいバーが現れたとき、まだ条件が満たされていれば、アクションが発生します。私が理解する限り、インジケータのバッファの最後の値は、最後に完了したバーで計算された値であるためです。そこで、未完成のバーでトリガーがかかるようにしたいのです。
指標は標準的なストキャスティクスです。エキスパートアドバイザーは、K線とD線の交点でトリガーされる必要があります。まさに交差点で、新しいバーが現れるまで、何も起こらないのです。新しいバーが表示されると同時に、まだ条件が満たされていれば、アクションが発生します。私が理解する限り、インジケータのバッファの最後の値は、最後に完了したバーで計算された値であるためです。そこで、未完成のバーでアクションが発生するようにしたいと思います。
最後のローソク足の指数は0です。
では、この問題を解決するために、どのような工夫をされたのでしょうか。ヘルプは読まれましたか?具体的に何がうまくいっていないのでしょうか?
コードを入れられるか?せめて何語かはっきりさせろよ。
コードを入れられるか?せめて何語でやってるのかはっきりさせろよ。
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。
GlaVredFX, 2022.01.17 22:52
この機能はもう使わないでください。関係ありません。この関数が存在する場合、最初に開いたオーダーを閉じる関数に置き換える必要があります。
グローバルレベルで規定されている 変数buySignalとsellSignalが よくわかりません。しかし、コンパイルしようとすると、以下のエラーが発生します。
こんにちは、初心者のために、前のバーの値ではなく、インジケータの現在の値( 現時点)を取得する方法を教えてください。EAは前のバーが終了したときにしかトリガーしないので、もっと早くトリガーする必要があります。
k_buffer[0]とd_buffer[0]の配列には、最新のインジケータの値が格納される。出力して自分で見ることの何が問題なのでしょうか?