#property indicator_chart_window#import "stdlib.ex4"string IntegerToHexString(int integer_number);//это для перевода десятичного формата в шестнадцатеричный, используем в print.
#import "StrAddress.dll"int GetStrAddress(string szStr);//из самописной dll.
#import "shlwapi.dll"int StrStrA(string pszFirst, string pszSrch);//из WinAPI.
#importint addr1;//будет выходной переменной для функции из самописной dll.
int addr2;//то же самое для функции из WinAPI.
int init()
{//тестовый прогон; в init(), это чтобы не повторялось
string s; strAddress (s);
s=""; strAddress (s);
s=s+"something"; strAddress (s);
s="MyStr"; strAddress (s);
s="mystr"; strAddress (s);
return(0);
}
int start()
{
int counted_bars=IndicatorCounted();//оставляем блок пустым
return(0);
}
void strAddress (string myStr)//тестовая функция
{
addr1=GetStrAddress(myStr);//эта из dll
addr2=StrStrA(myStr,myStr);//эта из WinAPI
Print(" строка ", CharToStr(34), myStr, CharToStr(34), " указатель 1: ", IntegerToHexString(addr1), ", указатель 2: ", IntegerToHexString(addr2));//в лог
}
皆さん、以前はエディターで予約語にカーソルを合わせてf1を押すと、下に機能の説明が書かれたウィンドウが開いていましたが、今はこれがないんです。何が問題なのでしょうか?
どうすれば常にポジティブな結果を得られるか、どなたか教えてください。(買いロット-売りロット)= -0.25 しかし、それは常に正の値でなければなりませんか?
私はそうします: if (profitbuy+profitsell > SymbProf_magBUY_magSELL* MathAbs((OrdersTotalMagicBuyLots(MagicBuy)-OrdersTotalMagicSellLots(MagicSell))/Lots)())
かっこのなかはなに?
if (profitbuy+profitsell > SymbProf_magBUY_magSELL* MathAbs((OrdersTotalMagicBuyLots(MagicBuy)-OrdersTotalMagicSellLots(MagicSell))/Lots)(?????)
どこが、何?
出来高=0.05のポジションを建てる。コードが必要 - 損失が5桁の100ピップに達したときに0.01でポジション量を減らす方法?
ありがとうございます。
私が書いたEAは何本もありますが、いずれも保留注文で取引する際に相場状況(ストップレベリング、スプレッドなど)をチェックするものばかりです。グリッドの書き方を見ましたが、同じストップレベリングの値を確認してからオーダーを出すというのは見たことがありません。その理由は何でしょうか。
テスターとその結果が実生活と異なる理由については、フォーラムにたくさんのメタラーがいます。記事欄をご覧ください。このトピックは何度も触れられています。
ありがとうございます。
代替品を発見
つまり、DLLでは文字列はchar*として渡され、MqlStrとしては渡されないが、ex4プログラムではMqlStringとして格納 されないということである。一般に、ex4からdllへのパラメータの転送は(開発者によれば)、あらゆる種類のチェックとパラメータの変換を伴う、かなり複雑なプロセスです。
MQL4リファレンスは読まれましたか?MQL4-stringはc-stringにnull-terminatorをつけたものと同じです。
文字列の配列を並べるためだけの構造です。純粋に、文字列配列の作成を容易にするためのメタクオーツの発明です。
shlwapi.dllライブラリのStrStrA。テスト
ログです。
その仕組みは次の通りです。/system32にあるShlwapi.dll。StrStrA は、StringSubstr の WinAPI アナログです。MQL4は型なし言語なので、出力時に文字列ではなくintをセットすると、文字列ではなくポインタが取得されます。StrStrA は文字列の中で部分文字列が最初に出現する場所を探し(大文字と小文字を区別しますが、私たちの文字列は同じなので気にしません)、文字列が同じなので、その最初の文字へのポインタ、つまり文字列そのものを返します。
これからこのコードを使う人のために説明します。WinAPIには文字列のフォーマットがありません。その代わり、lpsz形式(0x00で終わる文字の配列の最初の要素へのポインタ、別名/0)しかありません。メモリアドレスへのポインタである。メモリセルは32ビット(つまり4バイト)であり、intも4バイトのサイズなので、すべてがそこにきちんと収まるのです。
結論:文字列をint型配列に簡単にパックすることができ、それによって構造体をエミュレートし(MQL4には構造体やクラスはありません)、構造体やクラスが必要な場合は、さらにそれをDLLに渡すことができるのです。データ型変換のための自作DLL(C++の "int(const char*)"(C型変換)等の構文)は、現在使用できません。