Sin embargo, ¿en qué parte del código está Percent
y ¿qué hace el siguiente comando print("Número de lotes : ",Lotes); ?
#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) // Если бар не новый..
La quinta línea especifica el Porcentaje. El registro imprime: "Cantidad de lotes: 90,0100000001". ¿Tal vez deberíamos añadir NormalizeDouble()?
Michail_David: En la quinta línea se establece Percent. El registro muestra: "El número de lotes es 90.0100000001". ¿Tal vez deberíamos añadir NormalizeDouble()?
No hay nada malo en el lote.
Busque un error en la lógica de apertura del pedido.
En estos casos, suelo establecer una condición explícita que abrirá la orden
Michail_David: Por favor, ponga un ejemplo con una condición explícita. Si he entendido bien, debería haber una condición en el bucle para la apertura. ¿Verdad?
Dé un comando para abrir una orden al principio del código, justo después del cálculo del lote y asegúrese de que el probador funciona correctamente. Entonces puedes volver a poner todo en su sitio.
Renat Akhtyamov: Dé una orden para abrir una orden al principio del código, justo después de calcular el lote, y asegúrese de que el probador funciona correctamente. Luego puedes volver a colocar todo en su sitio.
Gracias. He encontrado un error. Tuve que volver; después del cálculo de los lotes. Por eso los lotes no se abrieron
Michail_David: La quinta línea especifica el Porcentaje. El registro muestra: "Número de lotes 90.0100000001". ¿Tal vez deberíamos añadir NormalizeDouble()?
Sí, deberías. Y no sólo los lotes, sino todos los demás valores que se pasan al servidor. Los lotes también son útiles para comprobar el mínimo y el máximo permitido en el valor de la cuenta, también en el cambio de paso, hubo casos en los que el lote se puede cambiar en incrementos de 0,03, por lo que 90,01 no funcionará, al menos sobreescrito.
Espero que haya un valor asignado a la variable Percent en OnInit().
Mi variable Porcentaje está definida por el usuario. OnInit() lo he dejado.
si Lots=0, el probador no abrirá nada
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;
Y aún así, en qué parte del código se establece Porcentaje
¿y qué hace el siguiente comando print("Lotes : ",Lotes); ?
Sin embargo, ¿en qué parte del código está Percent
y ¿qué hace el siguiente comando print("Número de lotes : ",Lotes); ?
#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) // Если бар не новый..
En la quinta línea se establece Percent. El registro muestra: "El número de lotes es 90.0100000001". ¿Tal vez deberíamos añadir NormalizeDouble()?
No hay nada malo en el lote.
Busque un error en la lógica de apertura del pedido.
En estos casos, suelo establecer una condición explícita que abrirá la orden
No hay nada malo en el lote.
Busque un error en la lógica de apertura de la orden.
En estos casos suelo establecer una condición explícita para que la orden se abra
Por favor, ponga un ejemplo con una condición explícita. Si he entendido bien, debería haber una condición en el bucle para la apertura. ¿Verdad?
Dé una orden para abrir una orden al principio del código, justo después de calcular el lote, y asegúrese de que el probador funciona correctamente. Luego puedes volver a colocar todo en su sitio.
La quinta línea especifica el Porcentaje. El registro muestra: "Número de lotes 90.0100000001". ¿Tal vez deberíamos añadir NormalizeDouble()?