コーディングのヘルプが必要

 

こんにちは。

私は非常にシンプルなEAを作ろうとしていますが、プログラマーではありませんし、EAを作ったこともありません。

MT4のMACDのサンプルを使って、いくつかの部分を編集し、残りの部分は必要ないと思って削除しました。

私のコードは本当にひどいと思います。

このようなEAにしたいと思います。

私のカスタムインジケータ ELineは、ステップで移動する2つのラインを持っています。あるときは一方が他方より高く、あるときは同じになります。

一方の線が他方の線と交差するとき、どちらの線が上に交差するかによって、EAがロングポジションまたはショートポジションを取るようにしたいのです。

EAの開始時以外は常にオープンポジションです。

コンパイルしようとすると、"if" - セミコロンが期待される (20,7) と表示されます。

次のステップでは、新しいポジションを開いたときに、すでにあるポジションを常にクローズしなければなりませんが、私は今のところこれをコーディングすることができませんでした。

どなたか、私のコードの誤りを訂正していただけませんか。また、EAが新しいポジションを持つたびにポジションをクローズする方法を教えていただけませんか。

どうもありがとうございました。

ファイル:
el1.mq4  2 kb
 

こんにちは

今、この問題を解決しました。EAをコンパイルして、バックテストをして みました。しかし、残念ながら、それは何も購入または売却しません!それは、それが動作しているように見えます。

これを除いて、それは動作するように見える、これはジャーナルです。

14:16:18 EL1 入力。Lots=0.1; Timeframe=240;

14:16:18 ELine GBPUSD,H4: 削除されました。

14:16:18 2005.11.14 00:00 ELine GBPUSD,H4: 正常にロードされました。

そして、これがEAコードです。

//+------------------------------------------------------------------+

//| T1.mq4

//|

//|

//+------------------------------------------------------------------+

extern double Lots = 0.1;

extern int Timeframe = 240;

string strDirCurrent="なし";

string strDirPrevious="none"。

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

int start()

{

// 現在の方向をチェックする

if(iCustom(NULL,Timeframe, "ELine",0,0)>iCustom(NULL,Timeframe, "ELine",1,0))

strDirCurrent="long "とする。

if(iCustom(NULL,Timeframe, "ELine",0,0)<iCustom(NULL,Timeframe, "ELine",1,0))の場合

strDirCurrent="ショート";

// 直前の方向と比較し、変化があればポジションを建てる

if(strDirCurrent=="long" && strDirPrevious=="short")

OrderSend(Symbol(),OP_BUY,Lots,Ask,3,50,200, "EABuyOrder",16384,0,Green).を送信します。

if(strDirCurrent=="short" && strDirPrevious=="long")

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,50,200, "EASellOrder",16384,0,Red).を送信します。

strDirPrevious=strDirCurrent;

}

// 終了。

どんなヘルプも大歓迎です!

ありがとうございます

エリック

 

こんにちは。

NUL LをNULLに 変更しても、コピレーションによるエラーは発生しません。

 

この掲示板の開発 コースを見れば、"My_First_EA "というクロスMAを使ったコーディンが見つかると思います。

私もEA-Prorammingの初心者ですが、あなたのEAをテストする結果は 得られなかった。申し訳ありません。

 

balueさん、ありがとうございます。NULLのスペースはコピー&ペーストによるもので、私のコードでは正しく記述されています。そして、それは(2番目のバージョン)コンパイルされます。

MQLのコースは知っています(まだ全部は読んでいませんが)。

ADX用の似たようなEAをテスト用に書きましたが、そこでは動作しています。私のカスタムインジケータを 使用しようとしたときだけ、それは取引しません。

 

インジケーターを添付してください -バックテストを 行うことができます。

こんにちは

素晴らしいコードです - ぜひバックテストをさせてください - あなたのカスタム・インジケータをお教えください。

私はあなたのコードを広範囲に修正しました。

/*

* Created by SharpDevelop.

* User: CARDIO

* Date: 1/17/2006

* Time: 4:55 AM

*

*Todo: if there is an ope position - close it- then open in opposite direction.

*

*/

//+------------------------------------------------------------------+

//| T1.mq4

//|

//|

//+------------------------------------------------------------------+

#include

extern double Lots = 0.1;

extern int Timeframe = 240;

string strDirCurrent="none";

string strDirPrevious="none";

int cnt, magicEA;

bool isclosing = false;

double slippage = 3;

int init() {

return(0);

}

int deinit() {

return(0);

}

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

int start()

{

magicEA = 16384;

// check for current direction

if(iCustom(NULL,Timeframe,"ELine",0,0)>iCustom(NULL,Timeframe,"ELine",1,0))

{

strDirCurrent="long";

}

if(iCustom(NULL,Timeframe,"ELine",0,0)<iCustom(NULL,Timeframe,"ELine",1,0))

{strDirCurrent="short";

}

// compare to previous direction and open a position if there was a change

if(strDirCurrent=="long" && strDirPrevious=="short")

{

//firs close open positions

isclosing = true;

isclosing1();

OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,"T1_EA_Buy_Order",16384,0,Green);

return(0);

}

if(strDirCurrent=="short" && strDirPrevious=="long")

{

isclosing = true;

isclosing1();

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,"T1_EA_Sell_Order",16384,0,Red);

return(0);

}

strDirPrevious=strDirCurrent;

return(0);

}

// the end.

void isclosing1(){

//Close all open orders

//todo: get a requote on the prices if error 138 occurs, use refreshrates

//todo: check if the last 3 closes where losers - if so stop the ea

int totalOrders = OrdersTotal();

int numPos = 0;

for(cnt=0; cnt<totalOrders; cnt++) { // scan all orders and positions...

OrderSelect(cnt, SELECT_BY_POS); // the next line will check for ONLY market trades, not entry orders

if(OrderSymbol() == Symbol() && OrderType() <= OP_SELL && OrderMagicNumber() == magicEA) { // only look for this symbol, and only orders from this EA

numPos++;

if(OrderType() == OP_BUY) { // Check for close signal for bought trade

if(isclosing) {

if (OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Violet)) { // Close bought trade

//writetofile("10","Closed buy", OrderTicket());

//prtAlert("Day Trading: Closing BUY order");

} else {

// writetofile("10b","Closed buy fail", ErrorDescription(GetLastError()));

}

}

} else { // Check sold trade for close signal

if(isclosing) {

OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Violet);

//writetofile("10","Closed buy", OrderTicket());

// prtAlert("Day Trading: Closing SELL order");

}else {

//writetofile("10c","Closed sell fail", ErrorDescription(GetLastError()));

}

}

}

}

}

 

固定された、希望

ハズレを修正しました。これを試してみてください

お金の管理など、まだまだ工夫が必要です。

ファイル:
el1.mq4  4 kb
 

ありがとうございます。

2006.01.17 18:59:10 2006.01.12 08:20 EL1:OrderSend 関数のパラメータ7として無効な二重数値があります。

2006.01.17 18:59:10 2006.01.12 08:10 EL1: OrderSend関数のコメントは、文字列でなければなりません。

2006.01.17 18:59:09 EL1: 読み込みに成功しました。

というエラーが100万回くらい繰り返されます;-)

でも、これは簡単に直せると思います。

 

これを試してみてください。

私はコードをテストしていません - あなたが指標を与える場合 - 私はテストします - 実際には私は別の指標でかなりすぐにそれをテストする予定です。 それでも、これが役立つことを願っています。

ファイル:
el1_1.mq4  5 kb
 

まだ修正中 - 今すぐ投稿しますから待っててね

まだ修正中

 

修正済み - うまくいけば

テイクプロフィット(tp)の値が足りなかっただけです。

tpとstoplossは必要ないのですか?

幸運を祈ります。

ファイル:
el1_2.mq4  5 kb
理由: