コーディングの方法は? - ページ 206

 

外部*.setファイルの使用

私は何度も試してみましたが、この問題を理解することができません。

私はEAをプログラムして、プログラムされた設定を使用するか、または外部*.setファイルを使用するようにしたいのです。

そこで、もし

extern bool UseExternSet = true;

とすると、プログラムされた設定ではなく、外部のセットファイルの設定を使用することになります。

それができることを知っているが、ここで単純に失われた。

どのようなeaの例ではありません

バーナード

 

コンパイラの問題かコードの問題か?

extern int ma1period=5;

extern int ma1method=1;

extern int ma1tf=0;

extern int ma2period=5;

extern int ma2method=1;

extern int ma2tf=10080;

extern double lots=1;

int init(){}

int deinit(){}

double CMA (int tf,int period, int shift, int method)

{

double MA=iMA(NULL,tf,period,0,method,0,shift)

return(MA)

}

int start()

{

int BarsCount=0;

if (Bars> BarsCount)

{

BarsCount=Bars;

double ma1.1=CMA(ma1tf,ma1period,1,ma1method);

double ma1.2=CMA(ma1tf,ma1period,2,ma1method);

double ma2.1=CMA(ma2tf,ma2period,1,ma2method);

double ma2.2=CMA(ma2tf,ma2period,2,ma2method);

bool ma1upsignal =ma1.2<ma1.1;

bool ma1downsignal =ma1.2>ma1.1;

bool ma2upsignal =ma2.2<ma2.1;

bool ma2downsignal =ma2.2>ma2.1;

if (ma1upsignal&&ma2upsignal)

{

OrderSend(Symbol(),OP_BUY,lots,Ask,3,NULL,NULL,NULL,NULL,0,Green);

}

if (ma1downsignal&&ma2downsignal)

{

OrderSend(Symbol(),OP_SELL,lots,Bid,3,NULL,NULL,NULL,NULL,0,Green);

}

if ((ma1upsignal&&ma2downsignal)||(ma1downsignal&&ma2upsignal))

{

int total=OrdersTotal(); //Script to close all open orders.

for(int i=total-1;i>=0;i--)

{

OrderSelect(i, SELECT_BY_POS);

int type = OrderType();

switch(type)

{

//Close opened long positions

case OP_BUY : OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );

break;

//Close opened short positions

case OP_SELL : OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );

}

}

}

}

これは、私が取り組んでいるコードの一部です。コンパイラは、「変数BarsCountが定義されていません」と言います。どうすればいいのでしょうか?私が見る限り、この変数は初期化され、値も与えられています。

これはコンパイラの問題なのでしょうか、それともコードの問題なのでしょうか?

ファイル:
capture2_1.png  12 kb
 

[CODE] (コード)

double CMA (int tf,int period, int shift, int method)

{

double MA=iMA(NULL,tf,period,0,method,0,shift)

return(MA);

}

 
username1:
[CODE]です。

double CMA (int tf,int period, int shift, int method)

{

double MA=iMA(NULL,tf,period,0,method,0,shift)

return(MA);

}

Michelです。

ありがとうございます。これで問題解決です :-)

 

連続したバーをカウントする

連続した売買バーをカウントする方法をご存知の方はいらっしゃいますか? 私はチャート(チェックするバーの 数を入力します)1連続した売りバー、32連続した売りバー、3連続した売りバー、4連続した売りバー(同じw /買い)などがある何回をカウントしたいのですが。

ループさせる必要があることは分かっているのですが、その方法がよく分かりません。

結果はComment()の中に入れることができます。

ありがとうございます。

 

なぜ私のプログラムは動作しないのですか?

簡単なプログレを書きました。

一度に一つの注文を入れ、利食いか損切りで終了することになっている。

これはGBPUSDのM30にセットアップされています。

私は:プログでsed定数のいくつかは、 "目測 "推定によって見つけられます。これはプログに大きな影響を与えないはずです...また、異なる定数では動作しません。(少なくとも、Strategy Testerで テストする場合、fastかmediumに設定します。"tick by tick "ではありません。(遅すぎる...)。

とにかく、このプログをテストしたところ、注文を入れることも、「上」方向へのチェックをすることもありませんでした。(これは、"プリント"/トレースによって)

(買いで入るか、売りで入るかをチェックするはずです。)

付帯するロジック: 2本の連続したバーをチェックする。バー1が高値と安値の両方を持っている場合、Progは次のバーが上昇すると考える。

(対称的に下降を意味する)

それに応じて利食い・損切りを設定。

このプログでは、"if "ステートメントがネストされている場合、動作しませんでした....

見ていただいてありがとうございました。

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

//| エキスパート初期化関数

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

int init()

{

//----

//----

return(0);

}

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

//| エキスパート初期化関数

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

int deinit()

{

//----

//----

return(0);

}

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

//| エキスパートスタート機能

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

int start()

{

//----

bool TrendUp1; double TakeProfitUp; double EE = .00500;

bool OrdTot_OK;double lot;double slip;

double SL_Trailing_Up;bool High2Up;bool Low2Up;

int ticketup;int ticketdown;bool DownAndBig; bool UpAndBig;

bool TrendDown; double SL_Trailing_Down;double TakeProfitDown;

bool High2down; bool Low2down;

int ABC = OrdersTotal();

double Size1 = .00630;bool BigUp; double A = High[1];double B= Low[2];//41

double C= High[2]; double D= Low[1];bool BigDown;

//ダウンオーダー開始

if (ABC == 0)// no orders out is true.

OrdTot_OK = trueです。

if (ABC == 0)// no orders out is true.

Print ("on down order sequence, no orders were out");

if ((C-D) > Size1)//high of 2 less of low of 1 > .0063

BigDown = true。

if ((C-D) > Size1)//HIGH OF 2 less LOW OF 1 > .0063

Print ("on down order sequence, found a big breakout down");

if (高値[1]<高値[2])

High2down=trueとする。

if (高値[1]<高値[2])

Print ("on down order sequence, the consecutive bars have decreasing highs");

if(Low[1]<Low[2])の場合

Low2down=true。

if(安値[1]<安値[2])

Print ("on down order sequence, the consecutive bars have decreasing lows");

if (ハイ2ダウン && ロー2ダウン)

TrendDown=true。

if (ハイ2ダウン && ロー2ダウン)

Print ("on down order sequence, TrendDown flag is set");

if (TrendDown)

SL_Trailing_Down = High[1];

if (TrendDown)

Print ("on down order sequence, did set the stop_loss");

if (TrendDown)

TakeProfitDown = ビッド - (.005);

if (トレンドダウン)

Print ("下降中の注文シーケンスで、テイクプロフィットを得ました", TakeProfitDown);

if (TrendDown && BigDown)

DownAndBig = true。

if (DownAndBig && OrdTot_OK)

ticketdown= OrderSend(Symbol(),OP_SELL,lot,Bid,slip,SL_Trailing_Down,TakeProfitDown,Blue).if (Down&Big & OrdTot_OK);

if (DownAndBig && OrdTot_OK)

Print ("on down order sequence, tried to enter a ticket", ticketdown);

if (チケットダウン < 0)

Print("OrderSend_Downはエラー#で失敗しました",GetLastError()).Print("OrderSend_Downはエラー#で失敗しました。

return(0);

//----------------------------------------------down order done

//---------------------------------------------------up order start

if (ABC == 0)

OrdTot_OK = trueです。

if (ABC == 0)

Print ("on the going up sequence, no orders were out");

if ((A - B) > Size1)

BigUp = true。

if ((A - B) > Size1)

Print ("on the going up sequence, the size test for the two bars was ok");

if (高値[1] > 高値[2])

High2Up = true;//44

if (高値[1] > 高値[2])

Print ("on the going up sequence, the test for increasing highs was ok");

if(ロー[1] > ロー[2])

Low2Up=trueとする。

if(安値[1] > 安値[2])

Print ("on the going up sequence, the test for increasing lows was ok");

if (High2Up && Low2Up)

TrendUp1=trueとする。

if (High2Up && Low2Up)

Print ("on the going up sequence, did set the flag for going up");

if (TrendUp1)

SL_Trailing_Up = Low[1] ;

if (TrendUp1)

Print ("on the going up sequence, established the stoploss");

if (TrendUp1)

TakeProfitUp = Ask + (.005);

if (TrendUp1)

Print ("上昇シーケンスで、利益確定", TakeProfitUp);

if (TrendUp1 && BigUp)

UpAndBig = true;

if ( UpAndBig && OrdTot_OK)

ticketup = OrderSend(Symbol(), OP_BUY,lot, Ask,slip, SL_Trailing_Up,TakeProfitUp,Red);

if (UpAndBig && OrdTot_OK)

Print ("on the going up sequence, tried to send in an order", ticketup);

if (チケットアップ < 0)

Print("OrderSend_Upはエラー#で失敗しました",GetLastError()).Print("OrderSend_Upはエラー#で失敗しました。

return(0);

//-------------------------------------------------up order done

//----

return(0);//この行はよくわかりません。

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

//----

return(0)です。

}

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

 

取引前/取引後の最小バー数

こんにちは。

こんにちは、私はMT4初心者です。どなたか、EAで新しいポジションを開くか、前のポジションを決済するために最低 "x "バーを必要とする制限を設ける方法を教えていただけませんか?

(スリープコマンドを使用せずに)

よろしくお願いします。

 

mqlコーディングヘルプ

if (iMA(NULL, 0, 24, 0, MODE_LWMA, PRICE_WEIGHTED, 1) > iMA(NULL, 0, 120, 1, MODE_LWMA, PRICE_WEIGHTED, 1)) gi_268 = 2;

---------------------------------------------------------------

それは何を意味するのでしょうか?

2 LWMAを使用 ?

LWMA期間=24シフト=0価格加重(hcll4)でクロスオーバーLWMA期間120シフト=1価格加重(hcll4)その後、購入または売却?

 

クローズポジションの問題

こんにちは。

私は新しいEAを使い始めたばかりで、オープニングポジションはOKです、私はtpとslを設定しました。EAは1つずつポジションを開き、閉じるのですが、1つ以上の注文があることはありません。しかし、いくつかのインジケータがslやtpのリミット前に警告した場合、私はポジションを閉じたいと思います。

このようにすると

for (int i=1; i<=OrdersTotal(); i++) {

if (OrderSelect(i, SELECT_BY_POS, 2)) {

if (OrderSymbol()==Symbol()) {

Ans=OrderClose(OrderTicket(),alLots,Bid,2);// Order closing

}

}

}[/CODE]

Nothing happened. Doesn't find any opened positions and I know there is 1.

If I try something like this:

for (int i=1; i<=OrdersTotal(); i++) {

CloseOrder(OrderValue(i,VAL_TICKET),OrderValue(i,VAL_LOTS),Bid,3);

}

Compiler report error message that VAL_TICKER and VAL_LOTS are not defined and in examples I found they are nowhere declared.

If I try direcly by number to close:

[CODE]

Ans=OrderClose(0,alLots,Bid,2);// Order closing

4107または4105のエラーメッセージが表示され、ティッカーが無効であることがわかります。

どなたかこれと添付の私のEAをチェックして助けて いただけませんか?

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

ファイル:
rsiproba.mq4  6 kb
 

iHighest iLowest 明解な説明

3つのバーを想定しています。バー[2]、バー[1]、バー[0](現在)。

以下の「stop_low()」関数は、バー [2] とバー [3] の最安値を見つけるのに正しいですか?

double stop_low = iLowest(Symbol(),0,1,2,1);

------------------------------------------------------------

参考にしてください。

int iLowest( string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0)

タイプに応じて、指定された期間数での最小値のシフトを返します。

パラメータは以下の通りです。

symbol - シンボルを表すデータ。NULLは、現在のシンボルを意味します。

timeframe - 時間枠。Timeframe列挙値のいずれかを指定します。0は、現在のチャートタイムフレームを 意味します。

type - Series array identifier(シリーズ配列識別子).Series array identifier列挙の値のいずれかを指定します。

count - 計算が実行される期間の数(開始バーから終了バーまでの方向)。

start - データを取得するバーを示す、現在のバーからの相対的なシフト。

サンプル

// 範囲内の連続する10本のバーのうち、最も低い値を計算する。

// 現在のチャートの 10 番目から 19 番目までのインデックスを含む範囲で、連続する 10 本のバーの最低値を計算します。

double val=Low;