MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 191

 
Vitaly Muzichenko:

行をコメントアウトして、1つの関数を動作させてみてください。


おぼえていると面白い)
 
Rustam Bikbulatov:

おぼえていると面白い)
何も知らなくても、コードに書いてありますよ。
 
Rustam Bikbulatov:

また、こんにちは。既知のプログラマーのコードを変更する方法を教えてください。現在、このフクロウは1秒間に約1回の取引を成立させています。プラス・マイナスに関係なく、一定の利益を超えたら即座に取引を終了するように変更したいです。

ログにエラーメッセージが書き込まれていませんか?

ClosePosBySelect内部の遅延をより合理的な値に減らすことはできませんか?そこでは、各オーダーを閉じるために何度も試行錯誤が行われ、失敗した場合は毎回Sleepが 表示されます。

ところで、エラーからのリカバリはもっと良い方法で行えます(これらの関数が作られた瞬間から、MTはERR_CONTEXT_BUSYとは異なるコードを生成することを学びました)。

 
Rustam Bikbulatov:

やり方がわかれば面白い)
この2つをこの 1つに置き換えることができます。私はこれでうまくいっていますが、DCの注文の実行速度に大きく依存します。
 
Maxim Kuznetsov:

エラーメッセージは記録されていますか?

ClosePosBySelect内部のディレイをより合理的な値に減らすことができます。各注文の決済は何度か試行され、その都度、失敗した場合はSleepが表示されます。

ところで、エラーからのリカバリはもっと良い方法で行えます(これらの関数が作られた瞬間から、MTはERR_CONTEXT_BUSYとは異なるコードを生成することを学びました)。

Sleepを 完全に削除してみましたが、違うようです。
 
Vitaly Muzichenko:
この 2つを置き換えても、私は問題なく使えますが、証券会社の注文執行の速さには大きく依存します。

それは完全なフクロウなのか、それとも何かのコードの一部なのか?
 

紳士専門家、助けて!!!この問題には3日前から取り組んでいる。Expert Advisor の標準機能(どこでも見かける機能です)を使って、wininet.dll を使ってインターネットからファイルを読み込んで、さらに解析してみました。


文字列ReadHTML()

{

if(!IsDllsAllowed())

{

Alert("設定でDLLを許可する必要があります。")

return(")です。

}

int rv = InternetAttemptConnect(0);

if(rv != 0)

{

Alert("InternetAttemptConnect() "呼び出し時のエラー);

return(")です。

}

int hInternetSession = InternetOpenW("Microsoft Internet Explorer", 0, "", "", 0);

if(hInternetSession <= 0)

{

Alert("InternetOpenW()の呼び出しエラー");

return(")です。

}

int hURL = InternetOpenUrlW(hInternetSession,URL, "", 0, 0, 0);

if(hURL <= 0)

{

Alert("InternetOpenUrlW()の呼び出しにエラーが発生しました。

InternetCloseHandle(hInternetSession)を使用します。

return("");

}

int cBuffer[256];

int dwBytesRead[1];

文字列 TXT = "";

while(!IsStopped())

{

bool bResult = InternetReadFile(hURL, cBuffer, 1024, dwBytesRead);

if(dwBytesRead[0] == 0)

が壊れる。

文字列 text = "";

文字列 text0= "";

for(int i = 0; i < 256; i++)

{

text0= CharToStr((char)(cBuffer[i] & 0x000000FF))とする。

if (text0!="\r") text = text + text0;

else dwBytesRead[0]--。

if(StringLen(text)==dwBytesRead[0])ブレーク。

text0= CharToStr((char)(cBuffer[i] >> (8 & 0x000000FF));

if (text0!="\r") text = text + text0;

else dwBytesRead[0]--。

if(StringLen(text)==dwBytesRead[0])ブレーク。

text0= CharToStr((char)(cBuffer[i] >> (16 & 0x000000FF));

if (text0!="\r") text = text + text0;

else dwBytesRead[0]--。

if(StringLen(text)==dwBytesRead[0])ブレーク。


text0= CharToStr((char)(cBuffer[i] >> (24 & 0x000000FF));

if (text0!="\r") text = text + text0;

else dwBytesRead[0]--。

if(StringLen(text)==dwBytesRead[0])ブレーク。

}

TXT = TXT + テキスト。

スリープ(1)。

}

InternetCloseHandle(hURL)。

InternetCloseHandle(hInternetSession)を使用します。

return(TXT)です。

}


一度だけ読み込まれたサイトがその後更新され、その後この関数を呼び出すと(1分以内の周期で、サイトはより頻繁に更新されますが)、同じサイトが変更されずに(最初に読み込まれたとおりに)表示されるのは、すべてOKです。Expert Advisorを再起動しても、ターミナル起動後の初回にファイルが読み込まれたため、表示されるようになります。更新方法は、手動で必要なサイト(それぞれ、更新された情報)でInternet Explorerを開き、機能が更新された情報の読み込みを開始し、サイトのこの設定をフリーズするか、ターミナルMT4の再起動時(ターミナル再起動後に初めて読み込む場合もあるので出力し続ける)しかありません。InternetOpenWやInternetOpenUrlWというパラメータが関係していると思われますが、デフォルト値は0です。しかし、これについての明確な説明は見つからず、他のEAではどうにか動作します(サイトから端末にニュースを再送信するExpert Advisorから取りました)。はい、端末の 設定で、必要なサイトに対して「WebRequestを許可する...」としてください。

 

こんにちは。

すでに私のRAMは発狂しています:EAに問題が発生し、TPまたはSLを取った後、再び注文を開始します!EAに問題が発生し、TPまたはSLを取った後、再び注文を開始します!私のRAMは発狂しています。

インジケータからのシグナルの後、2本目のバーだけにEAが拘束される条件が思い浮かばない

またはTPやSLがトリガーされた場合、新しいシグナルを待ちますが、インジケーターのシグナルが変化したときだけです。


void OnTick()

{

uptr =NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period, method, price, 0, n), 4)。

dntr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period, method, price, 1, n), 4)です。

if(DN_Trend()==true)

{

if(CountSell() == 0 && Bid < dntr && Open[3] < dntr && Close[3] < dntr)

{

ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red);

{

SL = NormalizeDouble(Bid + StopLoss*Point, Digits)です。

TP = NormalizeDouble(Bid - TakeProfit*Point, Digits)です。

if (OrderSelect(ticket, SELECT_BY_TICKET))

if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Print("販売エラー");

}

}

 
d1w4m3:

こんにちは。

すでに私のRAMは発狂しています:EAに問題が発生し、TPまたはSLを取った後、再び注文を開始します!EAに問題が発生し、TPまたはSLを取った後、再び注文を開始します。

インジケータからのシグナルの後、2本目のバーだけにEAが拘束される条件が思い浮かばない

または、TPやSLがトリガーされた場合、Expert Advisorは新しいシグナルを待ちますが、インジケータのシグナルが変化したときだけです。

最後に決済されたポジションが シグナルと同じタイプで、このポジションがストップ注文の1つで決済された場合、ポジションを建てないことです。
 
Artyom Trishkin:
最後に閉じたポジションが シグナルが来たときと同じタイプで、このポジションがストップ注文の一つで閉じたのなら、ポジションを開けないことです。


回答ありがとうございます、しかし、私は2週間ほど勉強を始めたばかりです、これをコードで実装する方法、またはどこを読めばよいか教えてください。それともイゴール・キムによると?

そして、まだそれは、その作業を開始したばかりのときに、システムに従っていない、ポジションを開く、あなたの条件は、この問題を回避することはできません。