double A[][10];
int renge_A_one=0; // =ArrayRange(A, 0); // Размер первого измерения (число строк)int renge_A_two=0; // =ArrayRange(A, 1); // Размер второго измерения (число столбцов)double B[][10];
int renge_B_one=0; // =ArrayRange(A, 0); // Размер первого измерения (число строк)int renge_B_two=0; // =ArrayRange(A, 1); // Размер второго измерения (число столбцов)int count_B=0;
//+------------------------------------------------------------------+//| Вариант 1. Копируем строки "А" в "В" без изменений |//+------------------------------------------------------------------+void Fun_1()
{
renge_A_one==ArrayRange(A, 0); // Выясняем Размер первого измерения (число строк)
renge_A_two==ArrayRange(A, 1); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"for(int i=0; i<range_A_one; i++) // Перебираем массив A[][10] по ПЕРВОМУ измерению.
{
count_B++;
ArrayResize(B, count_B);
for(int j=0; j<renge_A_two; j++) // Перебираем массив A[][10] по ВТОРОМУ измерению.
B[i][j]=A[i][j];
}
renge_B_one==ArrayRange(B, 0); // Выясняем Размер первого измерения (число строк)
renge_B_two==ArrayRange(B, 1); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"
}
// Результат: "А" скопирован в "В" без изменений // renge_A_one = renge_В_one// renge_A_two = renge_В_two//+------------------------------------------------------------------+//| Вариант 2. Копируем строки "А" в "В" при условии |//+------------------------------------------------------------------+void Fun_2()
{
renge_A_one==ArrayRange(A, 0); // Выясняем Размер первого измерения (число строк)
renge_A_two==ArrayRange(A, 1); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"for(int i=0; i<range_A_one; i++) // Перебираем массив A[][10] по ПЕРВОМУ измерению.
{
if(A[i][3]>0)
{
count_B++;
ArrayResize(B, count_B);
for(int j=0; j<renge_A_two; j++) // Перебираем массив A[][10] по ВТОРОМУ измерению.
B[i][j]=A[i][j];
}
}
renge_B_one==ArrayRange(B, 0); // Выясняем Размер первого измерения (число строк)
renge_B_two==ArrayRange(B, 1); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"
}
// Результат: часть строк "В" с соответствующими значениями// часть строк "В" заполнена "0" полностью, при том, что в "А" заполнены ЗНАЧЕНИЯМИ// renge_A_one > renge_В_one// renge_A_two = renge_В_two
double A[][10];
int renge_A_one=0; // =ArrayRange(A, 0); // Размер первого измерения (число строк)int renge_A_two=0; // =ArrayRange(A, 1); // Размер второго измерения (число столбцов)double B[][10];
int renge_B_one=0; // =ArrayRange(A, 0); // Размер первого измерения (число строк)int renge_B_two=0; // =ArrayRange(A, 1); // Размер второго измерения (число столбцов)int count_B=0;
//+------------------------------------------------------------------+//| Вариант 1. Копируем строки "А" в "В" без изменений |//+------------------------------------------------------------------+void Fun_1()
{
renge_A_one==ArrayRange(A, 0);// Выясняем Размер первого измерения (число строк)renge_A_two==ArrayRange(A, 1);// Выясняем Размер второго измерения (число столбцов). "На всякий случай"for(int i=0; i<range_A_one; i++) // Перебираем массив A[][10] по ПЕРВОМУ измерению.
{
count_B++;
ArrayResize(B, count_B);
for(int j=0; j<renge_A_two; j++) // Перебираем массив A[][10] по ВТОРОМУ измерению.
B[i][j]=A[i][j];
}
renge_B_one==ArrayRange(B, 0); // Выясняем Размер первого измерения (число строк)
renge_B_two==ArrayRange(B, 1); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"
}
// Результат: "А" скопирован в "В" без изменений // renge_A_one = renge_В_one// renge_A_two = renge_В_two//+------------------------------------------------------------------+//| Вариант 2. Копируем строки "А" в "В" при условии |//+------------------------------------------------------------------+void Fun_2()
{
renge_A_one==ArrayRange(A, 0); // Выясняем Размер первого измерения (число строк)
renge_A_two==ArrayRange(A, 1); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"for(int i=0; i<range_A_one; i++) // Перебираем массив A[][10] по ПЕРВОМУ измерению.
{
if(A[i][3]>0)
{
count_B++;
ArrayResize(B, count_B);
for(int j=0; j<renge_A_two; j++) // Перебираем массив A[][10] по ВТОРОМУ измерению.
B[i][j]=A[i][j];
}
}
renge_B_one==ArrayRange(B, 0); // Выясняем Размер первого измерения (число строк)
renge_B_two==ArrayRange(B, 1); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"
}
// Результат: часть строк "В" с соответствующими значениями// часть строк "В" заполнена "0" полностью, при том, что в "А" заполнены ЗНАЧЕНИЯМИ// renge_A_one > renge_В_one// renge_A_two = renge_В_two
これが、私が手に入れたものです。何が問題なのか、教えてください。ありがとうございました。
こんにちは。
mq4には誰もいないようなので、ここに書きます。
何が間違っているのか、教えてください。オプション2が機能しない。
こんにちは、MT4で関数を書きたいのですが、よろしくお願いします。私は自分の口座残高を知って いる、私は多くの取引が開かれる(例えば9)、私はリスク(例えば、口座残高の3%)を知っている、私はそれぞれの次のロットが倍増し、すべての取引が互いに重複する場合、最初の取引のためにロットを計算する必要があります。
これが、私が手に入れたものです。何が問題なのか、教えてください。ありがとうございました。
こんにちは。
mq4には誰もいないようなので、ここに書きます。
何が間違っているのか、教えてください。オプション2が機能しない。
ハイライト:代入 - "="があるべきで、比較 - "=="があります。
皆さん、こんにちは。
私はmt4でロボットを書くことを学んでいる、私はバイナリーオプションで開始することを決めた。簡単なEAを書いているのですが、コンパイラがたくさんの警告を出すので、理解できません(
ヘルプ:「おMQL4達人」 =))))))
ありがとうございました!)
以下は、そのEAのコードです。
//+------------------------------------------------------------------+
//|Bolinger_Bands_traider。mq4|(エムキューブ
//|Copyright 2017, Penrov Nikolay|ペンロフ・ニコライ。
//|vkcom/buzamonolit|電子書籍で漫画(マンガ)を読むならコミック.jp
//+------------------------------------------------------------------+
#property copyright "著作権 2017, Petrov Nikolay"
#property link "vk.com/buzamonolit"
#property version "1.00"
#プロパティの厳密さ
//+------------------------------------------------------------------+
//|エキスパート初期化関数|
//+------------------------------------------------------------------+
extern int Bolinger_Bands = 20; //ボリンジャーバンドの 周期
extern double Delta = 0.0003; // どの距離で注文を出すか
string Symb; // 金融商品の名前。
int Total; // 注文数
//+------------------------------------------------------------------+
//|エキスパート初期化関数|
//+------------------------------------------------------------------+
int init()
{
//----
Initialize_Objects(0)です。
//----
return(0)です。
}
//+------------------------------------------------------------------+
//|エキスパート初期化関数|
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0)です。
}
//+------------------------------------------------------------------+
//|エキスパートスタート機能|
//+------------------------------------------------------------------+
int start()
{
//----
二重価格 = Bid;
double CurrBol_High = iBands(Symb,0, Bolinger_Bands, 0,0, PRICE_CLOSE, MODE_UPPER, 0)です。
double CurrBol_Low = iBands(Symb,0, Bolinger_Bands, 0,0, PRICE_CLOSE, MODE_LOWER, 0);
double PriceBol_High = price - CurrBol_High;
double PriceBol_Low = price - CurrBol_Low;
datetime NextClose = Time[0] + Period()*60*2;
int MinutesToNextClose = (NextClose - TimeCurrent())/60 + 1;
int err;
// オーダーカウント
Symb=Symbol()です。// フィンの名前。symbol(); // symbol(); // order icon(); // symbol().
合計=0;// 注文数
for(int i=1; i<=OrdersTotal(); i++) // オーダーループ
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // 次がある場合
{// オーダー解析。
if (OrderSymbol()!=Symb)continue; // 当社の金融商品ではありません。
if (OrderType()>1)// 注文を保留しています
{
Alert("未決済注文を検出しました。 Expert Advisorは動作していません。")
return(0)です。// Exit()
}
トータル+α。// カウンターマーケット言いつけ
if (Total>1)// 複数のオーダーは不可
{
Alert("Several market orders. Expert Advisor is not working.");
return(0)です。// Exit()
}
}
}
ObjectSetText("Obj_Label", "TF" + Period() + ", " + DoubleToStr(price, 5) + ", tick " + TimeToStr(TimeCurrent(), TIME_SECONDS) + ", O@")+ TimeToStr(Time[0], TIME_MINUTES) + ", NC@".+ TimeToStr(NextClose, TIME_MINUTES) + " (" + MinutesToNextClose + " min)", 10, "Arial", DarkGreen );
ObjectSetText("Obj_Label2", "Orders:" + Total + ", delta " + DoubleToStr(Delta,5) + ", distance to MA:" + DoubleToStr(PriceBol_High,5), 10, "Arial", DarkGreen );
ObjectSetText("Obj_Label3", "Orders: " + Total + ", Delta " + DoubleToStr(Delta,5) + ", distance to MA:" + DoubleToStr(PriceBol_Low, 5), 10, "Arial", DarkGreen).
// 価格分析と注文の開始
if ((MathAbs(PriceBol_Low) < Delta) && (price > CurrBol_Low) && (Open[0] > CurrBol_Low+Delta) && (Total<1)))
{
if (OrderSend(Symbol(), OP_BUY, 1.00,Bid , 3, 0, 0, "BO exp:900", 0,DoubleToStr(MinutesToNextClose,0), Green) >0) Print ("Open OK");
さもなくば
{
err=GetLastError()です。
Print("エラー(",err,"));
return(0)です。
}
Print ("CALL @ " + price + " + TimeToStr(TimeCurrent(), TIME_SECONDS) + " exp in " + MinutesToNextClose);
}
if ((MathAbs(PriceBol_High) < Delta) && (price < CurrBol_High) && (Open[0] < CurrBol_High-Delta) && (Total<1)))
{
if (OrderSend(Symbol(), OP_SELL, 1.00,Bid , 3, 0, 0, "BO exp:900", 0,DoubleToStr(MinutesToNextClose,0), Red) > 0) Print ("Open OK");
さもなくば
{
err=GetLastError()です。
Print("エラー(",err,"));
return(0)です。
}
Print ("PUT @ " + price + " + TimeToStr(TimeCurrent(), TIME_SECONDS) + " exp in " + MinutesToNextClose);
}
//----
return(0)です。
}
//+------------------------------------------------------------------+
int Initialize_Objects(int Win) // ユーザーフィー
{// .オブジェクトの作成
ObjectCreate("Obj_Label",OBJ_LABEL, Win, 0,0); // オブジェクトの作成
ObjectSet("Obj_Label", OBJPROP_CORNER, 0); // コーナーにバインドされます。
ObjectSet("Obj_Label", OBJPROP_XDISTANCE, 13); // X座標
if (Win==0)
ObjectSet("Obj_Label",OBJPROP_YDISTANCE, 15);//Y 座標
さもなくば
ObjectSet("Obj_Label",OBJPROP_YDISTANCE,15);//Y座標
ObjectCreate("Obj_Label2",OBJ_LABEL,Win, 0,0); // オブジェクトの作成
ObjectSet("Obj_Label2",OBJPROP_CORNER, 0); // コーナーへのバインディング
ObjectSet("Obj_Label2", OBJPROP_XDISTANCE, 13); // X座標
if (Win==0)
ObjectSet("Obj_Label2",OBJPROP_YDISTANCE, 35);//Y座標
さもなくば
ObjectSet("Obj_Label2",OBJPROP_YDISTANCE, 35);//Y 座標設定
ObjectCreate("Obj_Label3",OBJ_LABEL, Win, 0,0); // オブジェクトを作成します。
ObjectSet("Obj_Label3",OBJPROP_CORNER, 0); // コーナーへのバインディング
ObjectSet("Obj_Label3", OBJPROP_XDISTANCE, 13); // X座標
if (Win==0)
ObjectSet("Obj_Label3",OBJPROP_YDISTANCE, 55);//Y座標
さもなくば
ObjectSet("Obj_Label3",OBJPROP_YDISTANCE, 55);//Y 座標設定
return(0)です。// ユーザーから退出する。機能
}
以下、注意事項です。何が嫌なのか解らない(
型変換によりデータが失われる可能 性がある Bolinger_Bands_traider.mq4 51 24
数値'から'文字列'への暗黙の変換 Bolinger_Bands_traider.mq4 76 35
number' から 'string' への暗黙の変換 Bolinger_Bands_traider.mq4 76 227
数値'から'文字列'への暗黙の変換 Bolinger_Bands_traider.mq4 77 43
数値'から'文字列'への暗黙の変換 Bolinger_Bands_traider.mq4 78 43
文字列'から'数値'への暗黙の変換 Bolinger_Bands_traider.mq4 85 71
数値'から'文字列'への暗黙の変換 Bolinger_Bands_traider.mq4 93 23
数値'から'文字列'への暗黙の変換 Bolinger_Bands_traider.mq4 93 91
文字列'から'数値'への暗黙の変換 Bolinger_Bands_traider.mq4 99 72
数値'から'文字列'への暗黙の変換 Bolinger_Bands_traider.mq4 107 23
number' から 'string' への暗黙の変換 Bolinger_Bands_traider.mq4 107 91
エラー 0 件、警告 11 件、コンパイル時間 204 msec 1 12
初級編。エラーはGetLots() 関数です。機能全体。
もしかしたら、正しい書き方を教えてくれるかもしれません。最大ロットからブルートフォースでループを使った計算をしたかった。
もしかしたら、正しい書き方を教えてくれるかもしれません。最大ロットから試行し、ループで計算したかった。
論理はどこにあるのか?最初の注文で最大許容ロットを設定し、連続した注文のたびにそれを増やしていくのです。控えめに言って、あまり賢明とは言えないと思いませんか?
さらに、ループ内の最初の注文のロットを、全く理解できない方法で減少させますが、その前に「計算」された他の注文のロットは変化せず、これらの値はこの関数の限界を超えることはありません。じゃあ、どうするんだ?
インクリメントループは実数ではだめで、カウンタ、整数でなければならないことは言うまでもない。しかし、ロット値をカウンタとして設定し、反復するたびにそこから1ずつ減算していくのです。これは大きな間違いであり、非常に重大なことです。
まず頭の中でロジックを明確にしてから、コードに実装してみてください。
しかし、ここで注意事項があります。何が嫌なのか理解できない(
型変換によりデータが失われる可能 性がある Bolinger_Bands_traider.mq4 51 24
数値'から'文字列'への暗黙の変換 Bolinger_Bands_traider.mq4 76 35
number' から 'string' への暗黙の変換 Bolinger_Bands_traider.mq4 76 227
数値'から'文字列'への暗黙の変換 Bolinger_Bands_traider.mq4 77 43
数値'から'文字列'への暗黙の変換 Bolinger_Bands_traider.mq4 78 43
文字列'から'数値'への暗黙の変換 Bolinger_Bands_traider.mq4 85 71
数値'から'文字列'への暗黙の変換 Bolinger_Bands_traider.mq4 93 23
数値'から'文字列'への暗黙の変換 Bolinger_Bands_traider.mq4 93 91
string' から 'number' への暗黙の変換 Bolinger_Bands_traider.mq4 99 72
数値'から'文字列'への暗黙の変換 Bolinger_Bands_traider.mq4 107 23
number' から 'string' への暗黙の変換 Bolinger_Bands_traider.mq4 107 91
エラー 0 件、警告 11 件、コンパイル時間 204 msec 1 12
エラー" タイプ変換によるデータ損失の可能性 Bolinger_Bands_traider.mq4 51 24" を理解するためにここではカウントしないので、51番で1行出力してください。
残りは「'数値'から'文字列'への暗黙の変換 Bolinger_Bands_traider.mq4 107 91
オブジェクトを作成する場所で、数値をテキスト文字列に変換する - たとえば、テキスト文字列。
ピリオド
はず
DoubleToString(Period(),0)です。
は,数値をテキスト文字列に変換し,テキスト文字列オブジェクトを作成します.
ピリオド
はず
DoubleToString(Period(),0)です。
いつからピリオドはDouble型 になったんだ?