#property link"" #property version"1.00" #property strict //--- input parameters inputint Percent=50; inputint Fast_EMA_Period=12; inputint Slow_EMA_Period=25; inputint Signal_Period=9; inputdouble Step_PSAR=0.02; inputdouble Maximum_PSAR=0.2; inputint MAGICNUMBER=413; staticdatetime New_Time;// Время текущего бара double Margin_Percent; //Используемые средства для открытия ордеров double Lots;//Определение общего количества лотов double Lots_Volume; double MacdCurrent;//Параметры MACD основной линии текущего бара double MacdPrevious1;//Параметры MACD основной линии предыдущего бара double MacdPrevious2;//Параметры MACD основной линии со смещением на 2 бара double StopLoss;//Параметры Трейлинг стоп по параметрам ParabolicSAR текущего бара double Previous_StopLoss;//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара double CurrentPSAR;//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ voidOnTick() {
bool New_Bar=false; // Флаг нового бара int ticket,total,cnt; //--------------------------------------------------------------------------- New_Time=TimeCurrent(); if(Time[0]==New_Time) // Сравниваем время New_Bar=true; // Поймался новый бар elseif(New_Bar==false) // Если бар не новый..
OnInit() でPercent 変数に値が代入されているといいのですが?
私のPercent変数はユーザー定義です。OnInit()落とした。
Lots=0の場合、テスターは何も開きません。
Margin_Percent=AccountFreeMargin()*Percent/100;
Lots=Margin_Percent/MarketInfo(Symbol(),MODE_MARGINREQUIRED);
Lots_Volume=(MathFloor(Lots)+MarketInfo(Symbol(),MODE_LOTSTEP));
if(Lots>Lots_Volume){
Lots=Lots_Volume;
}
else if(Lots<Lots_Volume)
Lots=MathFloor(Lots);
Print("Количество лотов : ",Lots);
return;
そしてやはり、コードのどこにset Percentがあるかというと
で、次のコマンドはどうなるのでしょうか?print("Lots : ",Lots); ?
それにしても、コードのどこにPercent
で、次のコマンドは何ですかprint("Number of lots : ",Lots); ?
#property version "1.00"
#property strict
//--- input parameters
input int Percent=50;
input int Fast_EMA_Period=12;
input int Slow_EMA_Period=25;
input int Signal_Period=9;
input double Step_PSAR=0.02;
input double Maximum_PSAR=0.2;
input int MAGICNUMBER=413;
static datetime New_Time;// Время текущего бара
double Margin_Percent; //Используемые средства для открытия ордеров
double Lots;//Определение общего количества лотов
double Lots_Volume;
double MacdCurrent;//Параметры MACD основной линии текущего бара
double MacdPrevious1;//Параметры MACD основной линии предыдущего бара
double MacdPrevious2;//Параметры MACD основной линии со смещением на 2 бара
double StopLoss;//Параметры Трейлинг стоп по параметрам ParabolicSAR текущего бара
double Previous_StopLoss;//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
double CurrentPSAR;//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
bool New_Bar=false; // Флаг нового бара
int ticket,total,cnt;
//---------------------------------------------------------------------------
New_Time=TimeCurrent();
if(Time[0]==New_Time) // Сравниваем время
New_Bar=true; // Поймался новый бар
else if(New_Bar==false) // Если бар не новый..
5行目にはPercentが設定されています。ログには、「ロット数は90.0100000001です」と表示されます。NormalizeDouble()を追加した方がいいのでは?
ロットは何も問題ありません。
注文開始のロジックにエラーがあるかどうかを調べます。
このような場合、私は通常、注文をオープンする明示的な条件を設定します。
ロットは何も問題ありません。
注文開始のロジックにエラーがあるかどうかを調べます。
このような場合、私は通常、注文を開始するための明示的な条件を設定します。
条件を明示した例を挙げてください。私の理解が正しければ、ループは開くための条件を1つ持っているはずです。そうだろ?
コードの最初、ロットを計算した直後に注文を開くコマンドを与え、テスターが正常に動作することを確認する。そして、すべてを元の位置に戻すことができます。
5行目にはPercentを指定する。ログには、「ロット数 90.0100000001」と表示されます。NormalizeDouble()を追加した方がいいのでは?