Personally I'm having problems with an array. I cant for the life of me figure out why the following code returns 0 all the time... Any help would be much appreciated. I'm trying to create an array of length STD_MA_Period+1 to later use with iMAOnArray but it doesnt work so its back to the drawing board I guess.
Alpariのアカウントで何度か試してみましたが、特に問題はありませんでした。一度だけ、expertsディレクトリにスクリプトを置き、EAとして起動したときです。
ディレクトリのことを聞いたからです。
すみません。問題がわかった気がします。私はウィンドウズ・ビスタを使っていて、いつもは「管理者として実行」しています。
MT4 .mq4からC++ DLLへの配列の渡し方
どんな助けでもお願いします。
私は、8つの指標値を含む単一の配列をC++のDLLに渡す問題があります。とても簡単なことなのですが、-1が発生するようです。
Forexindex()関数を 呼び出すと、実際にはDLLからインポートされた関数gepModel ( d [] )を呼び出すと、-1が得られるようです。 ForexIndex関数は、DLLから0または1を返す必要があります。
私は私がForexindex()の.mq4ファイルで何か間違ったことをしていると思われます。どんな助けでも非常に高く評価されるでしょう。以下は、簡単なコードです。C + +のDLLファイルは問題ありませんそれはエラーなしでOKをコンパイルするので、問題はmq4ファイルである.
================================MQ4 file====================
#import "JadeClass.dll"
int gepModel( double& d[] );
#import
int start()
{
........
........
........
ForexIndex()。
.......
......
......
.....
}
int ForexIndex()
{
int myindex;
double ind[] , MA_Close, MA_High, MA_Low, MA_Open, Macd, Rsi, Stoch, Vol;
int counted_bars=IndicatorCounted();
if (counted_bars<0) return(-1);
if (counted_bars>0) counted_bars--;
int pos=Bars-counted_bars;
MA_Close = iMA(NULL,PERIOD_M5,8,0,0,0) ;
MA_High = iMA(NULL,PERIOD_M5,8,0,0,0,0) ;
MA_Low = iMA(NULL,PERIOD_M5,8,0,0,0,0) ;
MA_Open = iMA(NULL,PERIOD_M5,8,0,0,0,0) ;
Macd = iMACD(NULL,PERIOD_M5,12,26,9,0,0,0);
Rsi = iRSI(NULL,PERIOD_M5,10,0,0); RSI = iRSI(NULL,PERIOD_M5,10,0,0);
Stoch = iStochastic(NULL,PERIOD_M5,14,3,3,0,0,0); Rsi = iRSI(NULL,PERIOD_M5,10,0,0);
Vol = iVolume(NULL,PERIOD_M5,0)です。
while(pos>=0)
{
ind[0] = MA_Close;
ind[1] = MA_High;
ind[2] = MA_Low;
ind[3] = MA_Open;
ind[4] = Macd;
ind[5] = Rsi;
ind[6] = Stoch;
ind[7] = Vol;
myindex = gepModel(ind);
pos--。
}
Print( " Myindex = " , myindex);
return (myindex);
}
=============================================== DLLソースコード
#include "stdafx.h"
#include "JadeClass.h"
#include
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#define MT4_EXPFUNC __declspec(dllexport)
// 唯一無二のCJadeClassAppオブジェクト
CJadeClassApp theApp;
MT4_EXPFUNC int __stdcall gepModel(double d[]);
MT4_EXPFUNC int __stdcall gepModel(double d[]); MT4_EXPFUNC int __stdcall gepModel(double d[])
{
.....
.....
.....
.....
}
DLLソースコードのDefファイル ============================================================================================================================
; JadeClass.def : DLLのモジュールパラメータを宣言しています。
LIBRARY "JadeClass" (ライブラリ)
EXPORTS
明示的なエクスポートは以下になります。
gepModel
========================================
1つのシグナルにつき1つの取引しかできないコードを 追加する手助けが必要です。
私はmq4コードを学んでいるところですが、1つのシグナルにつき1つの取引だけを行うコードを作成する方法を見つけようと何時間も費やしています。いくつかの方法を試しましたが、1つの取引だけを行うようにすることはできません。例としては、もしTPがヒットしたら、シグナルがまだ良いので、別の同じ側のトレードを置きます。私は、逆シグナルが出るまで待ち、それからその取引をするようにしたいのです。私の変更なしのEAをここに添付しました。よろしくお願いします。 マーティ
私はmq4コードを勉強しているところですが、1つのシグナルにつき1つの取引しかできないようにする方法を見つけようと何時間も費やしてきました。いくつかの方法を試しましたが、1つの取引だけを行うようにすることはできません。例としては、もしTPがヒットしたら、シグナルがまだ良いので、別の同じ側のトレードを置きます。私は、逆シグナルが出るまで待ち、それからその取引をするようにしたいのです。私の変更なしのEAをここに添付しました。よろしくお願いします。 マーティ
私は、1つのバーであまりにも多くのオープントレードに問題があった後、最近mql4.comでこれを行う方法を見つけました。mql4.comの記事は、最初の頃はとても役に立ちましたし、さらに、彼らはあなたに良い例を与えるコードのデータベースを持っています。検索機能を使い、投稿として表示するボタンをクリックするだけで、必要な1つの返答のために何ページものトピックを探す手間が省けます。あなたの問題については、次のコードを使用してください。
if(Bars<BarsCount)
{
//Code to do once goes here
BarsCount=Bars;
}
[/CODE]
Personally I'm having problems with an array. I cant for the life of me figure out why the following code returns 0 all the time... Any help would be much appreciated. I'm trying to create an array of length STD_MA_Period+1 to later use with iMAOnArray but it doesnt work so its back to the drawing board I guess.
[CODE]for(i=0;i<=STD_MA_Period+1;i++)
{
STD_MA_Buffer=iStdDev(Symbol(),Period(),STD_Period,0,MODE_SMA,PRICE_CLOSE,i);
}
Print(STD_MA_Buffer[1]);PS double STD_MA_Buffer[]; は、グローバル変数セクションで定義されています。
私のEAを修正してください。
私はいくつかのアイデアを持っていますが、私はmql4コードにそれを書き込むことができます、あなたは私を助けることができますか?
この私の問題
これは私のシステム定義です。
A. if orders=0 >> OP buy && OP sell
B. +または-条件によってグリッドを作る
例)もしOPbuy + grid = OPbuy
OPbuy - grid = OPsellとする。
OPsellの場合も同様
C. 利益 > 0 && 利益 > 最小利益 ( プロフィットロック ) の場合
OP buy || OP sell)とトレーリングエクイティまたはプロフィットポイントを移動させながらストップオーダーをします。
D. 利益で決済する場合、資本金でもポイントでも可能です。
E. .mq4形式は、どこに問題があるのか知りたいからです。
ポイントBに問題があります。
私はいくつかのアイデアを持っていますが、私はそれをmql4コードに書き込むことができます、あなたは私を助けることができますか?
この私の問題
これは私のシステム定義です。
A. if orders=0 >> OP buy && OP sell.
B. +または-条件でグリッドを作成する。
例:OPbuy + グリッド = OPbuy
OPbuy - grid = OPsellとする。
OPsellの場合も同様
C. 利益 > 0 && 利益 > 最小利益 ( プロフィットロック ) の場合
OP buy || OP sell)とトレーリングエクイティまたはプロフィットポイントを移動させながらストップオーダーをします。
D. 利益で決済する場合、資本金でもポイントでも可能です。
E. .mq4形式は、どこで失敗したかを知りたいからです。
ポイントBに問題があります。ex4の代わりにソースコードを送るのはどうでしょうか?
ex4の代わりにソースコードを送るのはどうでしょうか?
どのようにコーディングすればいいのか教えてください。
これが私の最後のdetailStatementです。
これを修正する.rar
OP販売でループする問題、解決できるといいのですが?
トレンドラインに関する 質問
コーディングの初心者で、練習のためにいろいろやっているのですが、トレンドラインを現在のバーで止めたいと思いました。私が思いついたのは、単に現在のバーの色を背景色に変更することでした。要するに、バーから先の線を背景になじませ、その時点で消滅させるということです。
そこで、専門家に正しい方法を尋ねました。同じことを達成するために多くの方法があることを知っているので、私はちょうど私が行うことができたものについていくつかの他のアイデアを参照してください、より多くを学ぶための努力です。
ありがとうございました。
MQLコードの奇妙な挙動について
皆さん、こんにちは。
メタトレーダーVer:4.00 ビルド 224 (2009年5月15日)
Metaeditor バージョン。4.00 ビルド 224 (2009年5月14日)
私はMQLで非常に奇妙なバグに遭遇し、完全に困惑しています。この問題を避けるために、私の古いコードをすべて見返しているほどです。
どなたか、ここで起こっていることを解明していただけると幸いです。
これがそのコードで、基本的には何もしないシンプルなインジケータです。しかし、init()セクションで、チャートの期間がH1であるときに2つの関数への呼び出しを配置しました。
この2つの関数は、1つの点を除いてすべて同じです。1つは静的なint配列が定義されており、もう1つは非静的なint配列が定義されています。これらの関数が行っていることは、ローカルに定義された配列のサイズを出力し、配列の要素にいくつかの値を代入して、それを出力しているだけです。
#property indicator_chart_window
void afunc() {
int i;
int array[4];
array[0] = 100;
array[1] = 101;
array[2] = 102;
array[3] = 103;
Print("afunc array[4] size="+ArraySize(array));
for (i = 0; i < 4; i++) {
Print("afunc array["+i+"]="+array);
}
}
void afunc_static() {
int i;
static int array[4];
array[0] = 100;
array[1] = 101;
array[2] = 102;
array[3] = 103;
Print("afunc_static array[4] size="+ArraySize(array));
for (i = 0; i < 4; i++) {
Print("afunc_static array["+i+"]="+array);
}
}
int init() {
if (Period() == PERIOD_H1) {
afunc();
afunc_static();
}
return(0);
}
int deinit() {
return(0);
}
int start() {
return(0);
}
コードを見れば、この2つの関数が互いに異なる動作をするような状況はないはずです。
しかし、このインディケータをM5チャートに貼り付け、H1タイムフレームに切り替えると、次のような出力が得られます。
2009.05.23 18:12:47 afunc EURUSD,H1: initialized
2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[3]=103
2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[2]=102
2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[1]=101
2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[0]=100
2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[4] size=4
2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[3]=0
2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[2]=0
2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[1]=0
2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[0]=0
2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[4] size=0
2009.05.23 18:12:47 afunc EURUSD,M5: uninit reason 3
2009.05.23 18:12:47 afunc EURUSD,M5: deinitialized
2009.05.23 18:12:45 afunc EURUSD,M5: 初期化されました。
2009.05.23 18:12:43 afunc EURUSD,M5: ロード成功
afunc()で'int array[4]'を定義したにもかかわらず、その配列のサイズは実際にはゼロであり、配列の要素に値を割り当てることができないことに注意してください。この関数は明らかに期待通りに動作していません。
afunc_static() で 'static int array[4]' を定義すると、サイズは正しく4と表示され、配列の要素に代入した値も表示されることに注意してください。この関数は正常に動作します。
結論から言うと関数内で非静的配列を定義し、その関数がインジケータから呼び出されない場合、問題が発生する可能性があります。
チャートのタイムフレームを切り替えてから 関数を呼び出すと、関数の中でローカルに定義された配列のサイズは、配列のサイズをどう定義したかに関係なく、ゼロになります。
この問題を回避する唯一の方法は、関数内でローカルに定義された配列が静的配列として定義されていることを確認することだと思います。しかし、それ以外にこの問題を回避する方法は見当たりません。
この問題について、何かご意見をいただければ幸いです。
よろしくお願いします。
Laurence.