[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 251

 
skyjet:
Profesionales, por favor, ayúdenme. He instalado mi Asesor Experto en 4 divisas en un terminal, pero sólo abre órdenes en 1 de ellas. ¿Cuál puede ser la razón de esto? ¿Cómo puedo hacer que funcione en 4 monedas a la vez?

Yo mismo me he enfrentado a este problema recientemente. Además de hacer la enumeración de las monedas en el EA, es necesario especificar correctamente el punto, la demanda, la oferta, los dígitos. Intercambiar los datos históricos de cada moneda, si se utiliza. Si hay cálculos con moneda predefinida iBar, iClose, inserte también la enumeración de la moneda en lugar de NULL. Este es un ejemplo para 25 pares de divisas. Tal vez no sea un gran experto, pero no he recibido una respuesta clara de los expertos, he tenido que probarlo yo mismo.


int nnnn;
string SymbolMax[25] = {"EURUSD", "GBPUSD", "USDCHF", "USDJPY", "AUDUSD", 
                        "USDCAD", "EURGBP", "EURJPY", "GBPJPY", "AUDCAD", 
                        "EURAUD", "EURCAD", "GBPCHF", "AUDCHF", "AUDJPY", 
                        "CADCHF", "CADJPY", "CHFJPY", "GBPAUD", "GBPCAD", 
                        "NZDCAD", "AUDNZD", "NZDJPY", "EURNZD", "NZDUSD"};

     if(nnnn<24) nnnn+=1; else nnnn=0;
     bid=MarketInfo(SymbolMax[nnnn],MODE_BID);
     ask=MarketInfo(SymbolMax[nnnn],MODE_ASK);
     point=MarketInfo(SymbolMax[nnnn],MODE_POINT);
     digits=MarketInfo(SymbolMax[nnnn],MODE_DIGITS);
     Startimeframe4();


 
sergeev:
Sí :)
Ya que respondes tan rápido, respóndeme una pregunta tonta: si cometo el error 1 en el código, ¿el terminal me lo devolverá? ¿Esta información no va al servidor?
 
granit77:
Ya que respondes tan rápido, respóndeme una pregunta tonta: si cometo el error 1 en el código, ¿el terminal me lo devolverá? ¿Esta información no va al servidor?

Me uno a la pregunta, sólo para añadir: "error 130".

 
granit77:
Ya que eres tan rápido en responder, respóndeme una pregunta estúpida: si cometo el error 1 en el código, ¿el terminal me lo devolverá? ¿Esta información no va al servidor?


Te lo diré de inmediato:

- No soy Sergeev :)

- y no sé :)

Pero

- es fácil de averiguar por la experiencia :)

 
granit77:
Ya que contestas tan rápido, respóndeme una pregunta tonta: si cometo el error 1 en el código, ¿el terminal me lo devolverá? ¿Esta información no va al servidor?

Lo he comprobado, no lo hace. Es la respuesta del terminal por modificación.
 
sergeev:
Comprobado, no lo es. por modificación, es la respuesta del terminal.
Gracias, así me lo puedo tomar con calma.
 
Roman.:


1.EURUSD o GBPUSD etc... - significa TODO ... ticket=OrderSend( EURUSD, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0, clOpen);

2.sy=Símbolo(); ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0, clOpen); - esto significa mediante asignación...

Esta función competente - función OpenPosition() para online - descúbrela y pégala en tu código de búho y todo funcionará... quizás a través de la asignación también...

Roman, gracias por tu ayuda y tu enfoque profesional :)
 
por favor, dígame si hay una función/comando que determine la comisión para todas las órdenes abiertas
 

Tengo un problema con el bucle utilizando una modificación,

Utilicé la modificación fractal con breakeven, obtuve infinitas modificaciones con fractal y breakeven.

la modificación se basa en https://book.mql4.com/ru/trading/ordermodify

//ф-я модификации ордеров безубыток

int mod_b()
{
//--------------------------------------------------------------- 2 --
for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:
int Tip=OrderType(); // Тип ордера
if(OrderSymbol()!=Symb||Tip>1)continue;// Не наш ордер
double SL=OrderStopLoss(); // SL выбранного орд.
double TP =OrderTakeProfit(); // TP выбранного орд.
double Price =OrderOpenPrice(); // Цена выбранн. орд.
int Ticket=OrderTicket(); // Номер выбранн. орд.
//------------------------------------------------------ 3 --
while(true) // Цикл модификации
{
double TS=Tral_Stop; // Исходное значение
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//Миним. дист&&((SL<TS && Tip==0)||(SL>TS && Tip==1))
if (TS < Min_Dist) // Если меньше допуст.
TS=Min_Dist; // Новое значение TS
//--------------------------------------------------- 4 --
bool Modify=false; // Не назначен к модифи
switch(Tip) // По типу ордера
{
case 0 : // Ордер Buy
if (NormalizeDouble(SL,Digits)< // Если ниже желаем.
NormalizeDouble(Bid-TS*Point,Digits))
{
SL=Price+18*Point; // то модифицируем его
string Text="Buy "; // Текст для Buy
Modify=true; // Назначен к модифи.
}
break; // Выход из switch
case 1 : // Ордер Sell
if (NormalizeDouble(SL,Digits)> // Если выше желаем.
NormalizeDouble(Ask+TS*Point,Digits)
|| NormalizeDouble(SL,Digits)==0)//или равно нулю
{
SL=Price-18*Point; // то модифицируем его
Text="Sell "; // Текст для Sell
Modify=true; // Назначен к модифи.
}
} // Конец switch
if (Modify==false) // Если его не модифи
break; // Выход из while
//--------------------------------------------------- 5 --

Alert ("Модификация ",Text,Ticket,". Ждём ответ..");
bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифи его!
//--------------------------------------------------- 6 --
if (Ans==true) // Получилось :)
{
Alert ("Ордер ",Text,Ticket," модифицирован:)");
break; // Из цикла модифи.
}

int mod_f()
{
//--------------------------------------------------------------- 2 --
for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:
int Tip=OrderType(); // Тип ордера
if(OrderSymbol()!=Symb||Tip>1)continue;// Не наш ордер
double SL=OrderStopLoss(); // SL выбранного орд.

//------------------------------------------------------обсчет фрактала

int f = 3; //номер бара с которого идет проверка наличия фрагтала
int DnN = 0, UpN = 0; //порядковый номер присвоен к направлению(upper, lower)
double UpFr = 0, DnFr = 0; //числовое значение фрагтала выраженное в еденице валюты присвоен к направлению(upper, lower)
while (f < Bars && (UpFr == 0 || DnFr == 0))
{
if (iFractals(Symbol(), 0, MODE_UPPER, f) != 0)
if (UpFr == 0)
{
UpFr = iFractals(Symbol(), 0, MODE_UPPER, f);//фрактальная отложка вверх(buy)
UpN = f;
}
if (iFractals(Symbol(), 0, MODE_LOWER, f) != 0)
if (DnFr == 0)
{
DnFr = iFractals(Symbol(), 0, MODE_LOWER, f);//фрактальная отложка вниз(sell)
DnN = f;
}
f++;
}
//------------------------------------------------------ 3 --
while(true) // Цикл модификации
{
double UD;
double TS=UD; // Исходное значение
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//Миним. дист
if(Tip==0)
UD=DnFr;
if(Tip==1)
UD=UpFr;
if (TS < Min_Dist) // Если меньше допуст.
TS=Min_Dist; // Новое значение TS
//--------------------------------------------------- 4 --
bool Modify=false; // Не назначен к модифи
switch(Tip) // По типу ордера
{
case 0 : // Ордер Buy
if (NormalizeDouble(SL,Digits)< // Если ниже желаем.
NormalizeDouble(UD,Digits))
{
SL=UD; // то модифицируем его
string Text="Buy "; // Текст для Buy
Modify=true; // Назначен к модифи.
}
break; // Выход из switch
case 1 : // Ордер Sell
if (NormalizeDouble(SL,Digits)> // Если выше желаем.
NormalizeDouble(UD,Digits)
|| NormalizeDouble(SL,Digits)==0)//или равно нулю
{
SL=UD; // то модифицируем его
Text="Sell "; // Текст для Sell
Modify=true; // Назначен к модифи.
}
} // Конец switch
if (Modify==false) // Если его не модифи
break; // Выход из while
//--------------------------------------------------- 5 --
double TP =OrderTakeProfit(); // TP выбранного орд.
double Price =OrderOpenPrice(); // Цена выбранн. орд.
int Ticket=OrderTicket(); // Номер выбранн. орд.

Alert ("Модификация ",Text,Ticket,". Ждём ответ..");
bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифи его!
//--------------------------------------------------- 6 --
if (Ans==true) // Получилось :)
{
Alert ("Ордер ",Text,Ticket," модифицирован:)");
break; // Из цикла модифи.
}

 
LazarevDenis:
por favor, dígame si hay una función/comando que determine la comisión para todas las órdenes abiertas
¿Por qué no calcula usted mismo el importe mediante la función OrderCommission()?

Razón de la queja: