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

 
forexman77:

別のDCで試したところ、問題ないようです。問題は、なぜ電話をかけたかだ。

は0.01を出力しますが、ボットには131と表示されるのですか?

ロットは関数に渡される際に正規化される必要があります。

 
Artyom Trishkin:

ロットは関数に転送される際に正規化する必要があります。


実は、私はノーマライゼーションと書きました。自動売買のロット数には上限があります。

ここでCaptain Obviousになる必要はないでしょう。
 
forexman77:

実は、私はノーマライゼーションと書きました。自動売買のロット数には何らかの制限があります。

キャプテンオビュアーにならないようにね。

まあ、そうやってコミュニケーションしたいのなら、自分で探せばいい。

 
rabanik:

ご返信ありがとうございました。

これが関数全体です。ポイントは、注文をオープンし、修正によって一定のストップロスとテイクプロフィットの値を追加していることです。

注文は出ているがストップロスやテイクプロフィットが設定されていない(赤字の計算関数で、OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES)でエラー(( )が出る

//オープンオーダー機能、変数:シンボル、オーダータイプ、ロット、オープン価格、TPとSLの計算方法(0 - 価格に設定、1 - オープン価格から計算すべきポイントに設定)、ストップロス、テイクプロフィット)。

/Symbol/Pair、オープンオーダーの種類 - 保留、オープン価格、スイッチ = 1、SL B TP - 損切りと利食いの値は一定です!

bool SendOrder(string Symb,int Type,double OP,int Mode) { {...
カラーCL
double Pp = MarketInfo(Symb,MODE_POINT);
if (Type==0) CL=Blue;
if (Type==1) CL=Red。
if (Type==2 || Type==4) CL=DarkTurquoise;
if (Type==3 || Type==5) CL=Orange;
//ボリューム検証
if(MarketInfo(Symb,MODE_LOTSTEP)==0.01) DG=2; else DG=1;
if (Lot<MarketInfo(Symb,MODE_MINLOT))とする。Lot=MarketInfo(Symb,MODE_MINLOT);
if (Lot>MarketInfo(Symb,MODE_MAXLOT))Lot=MarketInfo(Symb,MODE_MAXLOT);
if (Lot*MarketInfo(Symb,MODE_MARGINREQUIRED)>AccountEquity()){
PnC(StringConcatenate("取引開始のための資金が足りない",Type," volume: ",DoubleToStr(Lot,DG)),0);
を返します。
}
// 保留注文の確認
/*
double Slv = MarketInfo(Symb,MODE_STOPLEVEL)*Pp;
if (Type>1){。
if (Type==2 && MarketInfo(Symb,MODE_ASK)-OP<Slv) OP=MarketInfo(Symb,MODE_ASK)-Slv;
if (Type==3 && OP-MarketInfo(Symb,MODE_BID)<Slv) OP=MarketInfo(Symb,MODE_BID)+Slv;
if (Type==4 && OP-MarketInfo(Symb,MODE_ASK)<Slv) OP=MarketInfo(Symb,MODE_ASK)+Slv.OfMarketInfo(Symb,MODE_ASK)+Slv;
if (Type==5 && MarketInfo(Symb,MODE_BID)-OP<Slv) OP=MarketInfo(Symb,MODE_BID)-Slv;
}
*/
RefreshRates()。
int Min_Dist = MarketInfo(Symb,MODE_STOPLEVEL); //ストップロス/ステークプロフィットレベルをpips単位で制限する。最短距離
double Tek_Ask = MarketInfo(Symb,MODE_ASK); //最後に受け取った取引価格。現在のシンボルに対する定義済み変数Askに格納されます。
double Tek_Bid = MarketInfo(Symb,MODE_BID); //最後に受信した入札価格。現在のシンボルに対する定義済み変数Bidに格納される。
double Tek_Point = MarketInfo(Symb,MODE_POINT); //気配値通貨でのポイントサイズ。現在のシンボルに対して定義された変数Pointに格納されます。
int Tek_Digits = MarketInfo(Symb,MODE_DIGITS);// シンボル価格の小数点以下の桁数を指定します。現在のシンボルについては、あらかじめ定義された変数 Digits に格納される。

double Slv = NormalizeDouble(Min_Dist*Tek_Point,Tek_Digits);
if (Type>1){。
if (Type==2 && Tek_Ask - OP < Slv) OP = Tek_Ask - Slv;
if (Type==3 && OP - Tek_Bid < Slv) OP = Tek_Bid + Slv;
if (Type==4 && OP - Tek_Ask < Slv) OP = Tek_Ask + Slv;
if (Type==5 && Tek_Bid - OP < Slv) OP = Tek_Bid - Slv;
}
// チェックストップ
if (SL!=0 || TP!=0) {。
if (Mode=0){。
if (MathAbs(OP-SL)<Slv && SL!=0) {.
if (Type==0 || Type==2 || Type==4) SL=OP-Slv; else SL=OP+Slv;
}
if (MathAbs(OP-TP)<Slv && TP!=0) { { { (MathAbs(OP-TP)<Slv && TP!
if (Type==0 || Type==2 || Type==4) TP=OP+Slv; else TP=OP-Slv;
}
}else{
if (SL*Pp<Slv && SL!=0) SL=Slv/Pp;
if (TP*Pp<Slv && TP!=0) TP=Slv/Pp;
}
}
//オープニング
for(int k=0;k<=TryToTrade;k++){...
if (Type==0) OP=MarketInfo(Symb,MODE_ASK);
if (Type==1) OP=MarketInfo(Symb,MODE_BID);
PnC(StringConcatenate("注文を開始しようとしました、タイプ:",タイプ," 数量:",ロット," 価格:",OP),0).Attempted to open order, type:",Type," volume:",Lot," price:",OP);
if (IsTradeAllowed()){
int Ticket=OrderSend(Symb,Type,Lot,NormalizeDouble(OP,MarketInfo(Symb,MODE_DIGITS)),3,0,0,NULL,Tek_Magic,0,CL)となります。
}else{ PnC(StringConcatenate("Cannot open order ",k),0); Sleep(3000); continue; } }.
if (Ticket >= 0) { PnC(StringConcatenate("Order opened ",Ticket),0); break; }.
LastError=Fun_Error(GetLastError());
if (LastError=0){。
RefreshRates(); Sleep(WaitTime);
if (k==TryToTrade) return(false); }.
if (LastError==1) return(false);
if (LastError==2) { Work=false; return(false); }.
}
// ストップの設定
OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES);
if (SL==0 && TP==0) return;
if (Mode==1) {
if (SL!=0) {
if (Type==0 || Type==2 || Type==4) SL=OrderOpenPrice()-SL*Pp;
if (Type==1 || Type==3 || Type==5) SL=OrderOpenPrice()+SL*Pp;
}
if (TP!)=0) {
if (Type==0 || Type==2 || Type==4) TP=OrderOpenPrice()+TP*Pp;
if (Type==1 || Type==3 || Type==5) TP=OrderOpenPrice()-TP*Pp;
}
} }。

for(k=0;k<<TryToTrade;k++) {
PnC(StringConcatenate("Trying to set stops on order: ",Ticket," s/l: ",SL," t/p: ",TP),0)。
if (IsTradeAllowed()){
//TickeT=OrderModify(Ticket,NormalizeDouble(OrderOpenPrice(,MarketInfo(Symb,MODE_DIGITS)),NormalizeDouble(Symb,MarketInfo(Symb,MODE_DIGITS)),NormalizeDouble(TP,MarketInfo(Symb,MODE_DIGITS)),0,CLR_NONE) を実行。)
TickeT=OrderModify(Ticket,NormalizeDouble(OrderOpenPrice(,MarketInfo(Symb,MODE_DIGITS)),NormalizeDouble(SL,MarketInfo(Symb,MODE_DIGITS)),NormalizeDouble(TP,MarketInfo(Symb,MODE_DIGITS)),0,CLR_NONE)。
}else{ PnC(StringConcatenate("Cannot modify order ",k),0); Sleep(3000); continue; } }.
if (TickeT == true) { PnC(StringConcatenate("Order modified ",Ticket),0); break; }.
LastError=Fun_Error(GetLastError());
if (LastError=0){。
RefreshRates(); Sleep(WaitTime);
if (k==TryToTrade) return(false); }.
if (LastError==1) return(false);
if (LastError==2) { Work=false; return(false); }.
}
return(true)です。

}

さて、次の行のエラーはif (Type==0 || Type==2 || Type==4) SL=OrderOpenPrice()-SL*Pp; ですね。OrderOpenPrice() 関数は、同じエラー - 式を評価できませんでした を返します。なんということでしょう!!!
 
rabanik:
さて、次の行のエラーです。if (Type==0 || Type==2 || Type==4) SL=OrderOpenPrice()-SL*Pp;. OrderOpenPrice() 関数は、同じエラー - 式を評価できませんでした を返します。なんということでしょう!!!

すべて解決しました。愚問で申し訳ありません。int型のメイン変数SLを持っています。

そして、またタイプダブルで SLに挑戦しています。しかし、システムからは1が返される。

ありがとうございます。

 

あるEAを、それ以上の演算を実行し続けることなく、ある場所から最初の場所に戻して動作させる方法をどなたかご提案いただけないでしょうか。

 

こんにちは。質問は以下の通りです。EAが売り取引を開始しないのです。見てもらえますか?

 if (Digits==3||Digits==5) {sl=SL*10*Point;}
         else if (Digits==4||Digits==2) {sl=SL*Point;}
            if (OrdersTotal()==0)
              {
                if (Close[1]>TD2)
                OrderSend (Symbol(),OP_BUY,Lot,Ask,10,Ask-sl,0,NULL,Magic,0,clrBlue);
                else if (Close[1]<TD1)
                OrderSend (Symbol(),OP_SELL,Lot,Bid,10,Bid+sl,0,NULL,Magic,0,clrRed);
              }
 
6737998:

あるEAを、それ以上の演算を実行し続けることなく、ある場所から最初の場所に戻して動作させる方法をどなたかご提案いただけないでしょうか。

Оператор возврата return - Операторы - Основы языка - Справочник MQL4
Оператор возврата return - Операторы - Основы языка - Справочник MQL4
  • docs.mql4.com
Оператор возврата return - Операторы - Основы языка - Справочник MQL4
 
danil77783:

こんにちは。質問は以下の通りです。EAが売り取引を開始しないのです。見てもらえますか?

TD1とは何ですか?どこに値が割り当てられていますか?
 

友よ、この状況を正しく打開するためには...。このインジケータは、CSVから2本の水平線を 描きます(赤:その日の始まりから終わりまで 青:過去数日間、異なる価格水準でやってきたビーム)。しかし、これらの水準が同じ価値・価格である日もあるのです。この場合、線が重なった時にRay(Blue)が表示され、Redの線はチャート上では見えないが物理的には存在する・・・つまり透明であるようにするには、どうすればよいのでしょうか?

これで - Draw_Level("Red", red, DRAW_NONE, STYLE_SOLID,0); は線の描画を停止しますが、レイはその下からも見えません。ありがとうございます。