MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 99

 

ドラツチこのようなパネルはどのように作るのですか?

 
Andrey Sokolov:

ドラツチこのようなパネルはどのように作るのですか?

kodobaseの例を取ってやり直すと、あらゆるテイストのパネルを持つアドバイザーがたくさんいます。背景から 始まる
 
Andrey Sokolov:

ドラツチこのようなパネルはどのように作るのですか?

グラフィカルなオブジェクトで
 
 
Andrey Sokolov:
ヴィタリー・ムジチェンコアルチョム・トリシキン ありがとうございました。
エヌズト
 
trader781:

テスターでも負けて、マーチンゲールで別の豚を書き続ける、そうでなければどうやって大鹿を育てろというのだ。

現時点では、前の注文を閉じた後に次の注文を開くことができるようにするための、望ましいパラメータがあります。

2つのシナリオがあります。

1)値が真 である場合

命令を出す

プロセス

了い

と開き直る

2) falseの場合

注文を開く

プロセス

閉じる

を実行し、ExpertRemoveを実行します。

問題は、この2つの条件は互いに排他的であるにもかかわらず、1つのExpert Advisorで組み合わせなければならないことです。

1) スタート時に値が設定されている

2) 入力・処理条件に値が設定され、処理を受け付けた場合(trueならopen)

3) 閉じた後、falseを設定する

もし、そういうことに興味のある方がいらっしゃれば、私の変種を聞いていただければと思います。
ロジックに問題があるのです。

単純なことです。

  1. 命令を出す
  2. 注文を処理する
  3. 注文を閉じる
  4. 状態を確認し...
    • trueなら、ExpertRemove()
  5. もう一度
 
Artyom Trishkin:
私たちは、論理に問題があるのです。

すべてがシンプルです。

  1. 命令を出す
  2. 注文を処理する
  3. 注文を閉じる
  4. を確認し、...
    • trueなら、ExpertRemove()
  5. を繰り返して
本当ならキャベツを切らないといけないのに、茂みに行ってはいけないなんて、何かが間違っているような気がするのですが......。)
 
Vitaly Muzichenko:
何かおかしいな、本当ならキャベツを切っているはずなのに、茂みの中にいるなんて)
間違っている。偽り。テストが何なのかわからない...。くそ、まだ理屈はあるんだ。
それとも、おしゃべりしたいだけ?
 

アドバイスをお願いします。Expert Advisor はターミナルで注文を開きません。チャートによると、注文はオープンされるはずです。しかし、彼らはそうではありません。コードを添付します。

double Lots=NormalizeDouble((AccountFreeMargin()/100*Percent)/MarketInfo(Symbol(),MODE_MARGINREQUIRED),1);//determine number of lots
double MacdCurrent=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,0);// 現在のバーのMACDパラメータを表示します。
double MacdPrevious1=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,1);// 前のバーの MACD パラメータ。
double MacdPrevious2=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,2);// メインラインのMACDパラメータを2本分オフセットしたもの。
double StopLoss=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,0);// 現在のバーのParabolicSARパラメータによるトレーリングストップパラメータ
double Previous_StopLoss=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,1);//ParabolicSAR パラメータによる前バーでの StopLoss パラメータ。
double PSARCurrent=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,0);//parameters 現在のバーのParabolicSAR
double PSARPrevious=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,1);//ParabolicSAR parameters of the previous bar
//+------------------------------------------------------------------+
//| エキスパートティック機能|
//+------------------------------------------------------------------+
void OnTick()
{
static datetime New_Time=TimeCurrent();// 現在のバーの時刻
bool New_Bar=false; // 新しいバーをフラグにする。
int ticket,total,cnt;
//---------------------------------------------------------------------------
{
New_Bar=false; // 新しいバーを表示しない。
if(Time[0]==New_Time) // 時間を比較する。
{
New_Bar=true; // New_Barが捕まる
if(New_Bar==false) // バーが新しいものでない場合
return; // ...そして終了
}
}
total=OrdersTotal();//注文数の決定
if(total<1)
{
//--未決済の注文はありません
if((AccountFreeMargin()/100*Percent)<MarketInfo(Symbol(),MODE_MARGINREQUIRED)*(MarketInfo(Symbol(),MODE_MINLOT))
//最低ロットの開設資金の有無の確認
{
Print("資金が足りません。自由資金=",AccountFreeMargin());
を返します。
}

//--ロングポジションの開始(買い)の条件
if((MacdCurrent>0 && MacdPrevious1<=0 && MacdPrevious2<0))
&&
PSARCurrent<iOpen(NULL,0,1))です。
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss,0,NULL,MAGICNUMBER,0,Green)。
if(ticket>0)//オープンポジションのチェック
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order open : ",OrderOpenPrice());
さもなくば
Print("BUY order open error : ",GetLastError());
を返します。
}
}

//--ショートポジション(売り)を建てるための条件
if((MacdCurrent<0 && MacdPrevious1>=0 && MacdPrevious2>0))
&&
PSARCurrent>iOpen(NULL,0,1))です。
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,StopLoss,0,NULL,MAGICNUMBER,0,赤)。
if(ticket>0)//オープンポジションのチェック
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order open : ",OrderOpenPrice());
さもなくば
Print("Error opening SELL order : ",GetLastError());
を返します。
}
}
//--- "未決済注文なし "ブロックを抜ける

}
//--市場に正しく参入することは重要だが、市場から正しく退出することはもっと重要である。
for(cnt=0;cnt<total;cnt++)
{
if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()==MAGICNUMBER && // オーダーのマジックナンバーをチェックする)
OrderSymbol()==Symbol()) // 注文記号を確認する
{
//--- ロングポジションを開設
if(OrderType()==OP_BUY)
{
//--- 閉鎖しなければならないのか?
if((MacdCurrent<0 && MacdPrevious1>=0 && MacdPrevious2>0))
&&
PSARCurrent>iOpen(NULL,0,1))です。
{
//--- 注文の終了と終了
if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))
Print("OrderCloseエラー",GetLastError());
を返します。
}
//------------------ StopLossによる注文の変更
if(StopLoss>Previous_StopLoss && StopLoss<iOpen(NULL,0,0))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Previous_StopLoss,0,0,Blue))
Print(" 注文修正エラー。エラーコード=",GetLastError());
さもなくば
Print("注文のストップロス価格は正常に変更されました。")
を返します。
}
}

else // ショートカット
if(オーダータイプ()==OP_SELL)
{
//--- 閉鎖しなければならないのか?
if((MacdCurrent>0 && MacdPrevious1<=0 && MacdPrevious2<0))
&&
PSARCurrent<iOpen(NULL,0,1))です。
{
//--- 注文の終了と終了
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
Print("OrderCloseエラー",GetLastError());
を返します。
}
//-----------------StopLossによる注文の変更
if(StopLoss<Previous_StopLoss && StopLoss>iOpen(NULL,0,0))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Previous_StopLoss,0,0,Blue))
Print("注文修正エラー。エラーコード=",GetLastError());
さもなくば
Print("注文のストップロス価格は正常に変更されました。")
を返します。
}
}
}

//-------------------------------------------------------------------------------------------------------

 
trader781:

ええ、もっと単純な話です。

これを予備としておいて、次のようにしたらどうだろう。

を確認し、...
  • trueの場合、ボットは最小限の動作で停止します。

つまり、どのようにして入力を遮断し、次の動作をさせるか。

return(0); が、これは望ましくない - 他に何も処理できないからだ。