[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 910

 
Vinin:

ビクター、あなたの個人的なメッセージを見てみてください。
 
glasha:
ビクター、あなたの個人的なメッセージを見てみてください。

見る
 
dimon74:

OrderSend()は1ティックごとにトリガーされます(私の理解では)。この問題を解消するには、start関数の前にint H= 0のように変数を配置します。

さらにコードを。

..........

if ( H==0)

{

OrderSend(ボチボチ)です。

}

H=1;

そして、代数も必要ない。また、OrdersTotal() は制限するために使用しない方が良い。


私は理解し、それは私のために動作します、私は1つの注文を開く必要があり、それは次のティックで開かれないということです。

2順目、2順目は1順目が終了して初めて必要となる

 

私の勘違いでなければ、こんな感じでしょうか?

int H=0;

int F=OrdersTotal();

..........

if(F<1)

{

if ( H==0)

{

OrderSend(ボチボチ)です。

}

H=1;}

 
gheka:

私の勘違いでなければ、こんな感じでしょうか?

int H=0;

int F=OrdersTotal();

..........

if(F<1)

{

if ( H==0)

{

OrderSend(ボチボチ)です。

}

H=1;}

total = CountTrades();
if (total < 1) {
ticket = OrderSend
}

int CountTrades() {
   int count = 0;
   for (int trade = OrdersTotal() - 1; trade >= 0; trade--) {
      OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++;
   }
   return (count);
}
 
gheka:


私は理解し、それは私のために動作します、私は1つの注文を開く必要があり、それは次のティックで開かれないということです。

2番目の注文は、1番目の注文が終了したときに開く必要があります。

ここで確認しておくとよいでしょう。
 

皆さん、こんにちは。EAを書くのが苦手な私は、このようなことを学ぼうとしましたが、始めたばかりでかなり難しいです。価格が移動平均線を超えたら取引を開始し、反対側の交差点でストップロスまたはトレイリングストップを使用して取引を終了するEAを作成したいのです。このようなEAの例を見つけたのですが、トレーリングストップやストップロスがなく、取引は単に交差するところでオープン、クローズされるだけです。そのための知識が足りないんです。トレーリングストップとストップロスをどこに置くか、どうすればうまくいくか、誰かに教えてもらいたいのです。

#property copyright"Jake Sunders"

#プロパティリンク "feloq@mail.ru"



#define STATE_SQUARE 0

#define STATE_LONG 1

#define STATE_SHORT 2



//---- 入力パラメータ

extern int MAPeriod=26;
extern double LotsNumber=1.0;
extern double TrailingStop=50;
extern double StopLoss= 50;


//---- グローバル変数

int CurrentState。

int MyOrderTicket;

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

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

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

int init()

{

//----

if (iMA(NULL, 0, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0) > Close[0])

CurrentState = STATE_SHORT;

else CurrentState = STATE_LONG;

MyOrderTicket = 0;
//----
return(0)です。
}
//+------------------------------------------------------------------+
//| 専門家による初期化関数
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0)です。
}
//+------------------------------------------------------------------+
//| エキスパートスタート機能
//+------------------------------------------------------------------+
int start()
{
//----
int err;
ダブルMA
MA = iMA(NULL, 0, MAPeriod, 0, MODE_EMA, PRICE_CLOSE, 0);
if ( CurrentState == STATE_LONG)
{
if (MA > Close[1]) //移動平均線が終値より高い場合
{
CurrentState = STATE_SHORT;
//売りに転じる
//--開いた場合はポジションを閉じる
if ( MyOrderTicket != 0)
{
if (!OrderClose(MyOrderTicket, LotsNumber, Bid, 3, CLR_NONE))
{
err = GetLastError()。
Print("Error at closing position: ", err);
return(0)です。
}
MyOrderTicket = 0;
}
RefreshRates()。
//--- ロングポジションは正常に終了しました。
//--- それでは、売りポジションをオープンします。
//--- フリーファンドを確認する
MyOrderTicket = OrderSend(Symbol(), OP_SELL, LotsNumber, Bid, 3, 0, 0,
null, 0, 0, clr_none) とする。
if (MyOrderTicket<0)
{
err = GetLastError()。
Print("Error at the opening of position: ", err);
MyOrderTicket = 0;
}
}
}
さもなくば
{
if (MA < Close[1]) // 終値より下に平均値をスライドさせる。
{
CurrentState = STATE_LONG;

//逆に購入する
//--開いた場合はポジションを閉じる
if ( MyOrderTicket != 0)
{
if (!OrderClose(MyOrderTicket, LotsNumber, Ask, 3, CLR_NONE))
{
err = GetLastError()。
Print("Error at closing position: ", err);
return(0)です。
}
MyOrderTicket = 0;
}
RefreshRates()。
//--- ショートポジションは正常に終了しました。
//--- それでは、買いポジションをオープンします。
//--- フリーファンドを確認する
MyOrderTicket = OrderSend(Symbol(), OP_BUY, LotsNumber, Ask, 3, 0, 0,
null, 0, 0, clr_none) とする。
if (MyOrderTicket<0)
{
err = GetLastError()。
Print("Error at the opening of position: ", err);
MyOrderTicket = 0;
}
}
}
//----
return(0)です。
}

 

皆さん、アドバイスをお願いしますローソク足やローソク足の有効期限にポジションをオープン、クローズするにはどうすればよいですか?つまり、新しいローソク足の始点で開き、終点は

ローソク足の終値でインジケーターの値を取るにはどうしたらいいですか?

 
gheka:

50~100近いポジションで、同じ値段で開く買い注文と売り注文がある。

注文を1つだけ出すにはどうしたらいいのでしょうか?

この機能がないと、代数全体を入力する必要があるような気がします。


トレードを行うための誤った条件、2本のMAの例を参照。
 
Superjake:

皆さん、こんにちは。EAを書くのが苦手な私は、このようなことを学ぼうとしましたが、始めたばかりでかなり難しいです。価格が移動平均線を超えたら取引を開始し、反対側の交差点でストップロスまたはトレイリングストップを使用して取引を終了するEAを作成したいのです。このようなEAの例を見つけたのですが、トレーリングストップやストップロスがなく、取引は単に交差するところでオープン、クローズされるだけです。そのための知識が足りないんです。トレーリングストップとストップロスをどこに置くか、どうすればうまくいくか、誰かに教えてもらいたいのです。

#property copyright "Jake Sunders"

#プロパティリンク "feloq@mail.ru"



#define STATE_SQUARE 0

#define STATE_LONG 1

#define STATE_SHORT 2



//---- 入力パラメータ

extern int MAPeriod=26;
extern double LotsNumber=1.0;
extern double TrailingStop=50;
extern double StopLoss= 50;


//---- グローバル変数

int CurrentState。

int MyOrderTicket;

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

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

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

int init()

{

//----

if (iMA(NULL, 0, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0) > Close[0])

CurrentState = STATE_SHORT;

else CurrentState = STATE_LONG;

MyOrderTicket = 0;
//----
return(0)です。
}
//+------------------------------------------------------------------+
//| 専門家による初期化関数
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0)です。
}
//+------------------------------------------------------------------+
//| エキスパートスタート機能
//+------------------------------------------------------------------+
int start()
{
//----
int err;
ダブルMA
MA = iMA(NULL, 0, MAPeriod, 0, MODE_EMA, PRICE_CLOSE, 0);
if ( CurrentState == STATE_LONG)
{
if (MA > Close[1]) //移動平均線が終値より高い場合
{
CurrentState = STATE_SHORT;
//売りに転じる
//--開いた場合はポジションを閉じる
if ( MyOrderTicket != 0)
{
if (!OrderClose(MyOrderTicket, LotsNumber, Bid, 3, CLR_NONE))
{
err = GetLastError()。
Print("Error at closing position: ", err);
return(0)です。
}
MyOrderTicket = 0;
}
RefreshRates()。
//--- ロングポジションは正常に終了しました。
//--- それでは、売りポジションをオープンします。
//--- フリーファンドを確認する
MyOrderTicket = OrderSend(Symbol(), OP_SELL, LotsNumber, Bid, 3, 0, 0,
null, 0, 0, clr_none) とする。
if (MyOrderTicket<0)
{
err = GetLastError()。
Print("Error at the opening of position: ", err);
MyOrderTicket = 0;
}
}
}
さもなくば
{
if (MA < Close[1]) // 終値より下に平均値をスライドさせる。
{
CurrentState = STATE_LONG;

//逆に購入する
//--開いた場合はポジションを閉じる
if ( MyOrderTicket != 0)
{
if (!OrderClose(MyOrderTicket, LotsNumber, Ask, 3, CLR_NONE))
{
err = GetLastError()。
Print("Error at closing position: ", err);
return(0)です。
}
MyOrderTicket = 0;
}
RefreshRates()。
//--- ショートポジションは正常に終了しました。
//--- それでは、買いポジションをオープンします。
//--- フリーファンドを確認する
MyOrderTicket = OrderSend(Symbol(), OP_BUY, LotsNumber, Ask, 3, 0, 0,
null, 0, 0, clr_none) とする。
if (MyOrderTicket<0)
{
err = GetLastError()。
Print("Error at the opening of position: ", err);
MyOrderTicket = 0;
}
}
}
//----
return(0)です。
}


この例をご覧ください。