[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 251

 
skyjet:
Professionnels, aidez-moi ! J'ai installé mon Expert Advisor sur 4 devises dans un terminal, mais il n'ouvre des ordres que sur 1 d'entre elles. Quelle peut en être la raison ? Comment faire pour qu'il fonctionne dans 4 devises à la fois ?

J'ai moi-même été confronté à ce problème récemment. En plus de faire l'énumération des devises dans l'EA, vous devez spécifier correctement Point, ask, bid, digits. Échanger les données historiques sur chaque devise, si elle est utilisée. S'il y a des calculs avec une devise prédéfinie iBar, iClose, insérez également l'énumération de la devise au lieu de NULL. Voici un exemple pour 25 paires de devises. Je ne suis peut-être pas un grand expert, mais je n'ai pas reçu de réponse claire de la part des experts, j'ai dû essayer moi-même.


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:
oui :)
Puisque vous répondez si rapidement, répondez à une question stupide : si je fais l'erreur 1 dans le code, le terminal me la renverra-t-il ? Cette information n'est-elle pas transmise au serveur ?
 
granit77:
Puisque vous répondez si rapidement, répondez à une question stupide : si je fais l'erreur 1 dans le code, le terminal me la renverra-t-il ? Cette information ne va-t-elle pas sur le serveur ?

Je joins la question, seulement pour ajouter : "erreur 130".

 
granit77:
Puisque vous êtes si rapide à répondre, répondez à une question stupide : si je fais l'erreur 1 dans le code, le terminal me la renverra-t-il ? Cette information ne va pas sur le serveur ?


Je vais vous le dire tout de suite :

- Je ne suis pas Sergeev :)

- et je ne sais pas :)

Mais

- il est facile de le découvrir par expérience :)

 
granit77:
Puisque vous répondez si rapidement, répondez à une question stupide : si je fais l'erreur 1 dans le code, le terminal me la renverra-t-il ? Cette information n'est-elle pas transmise au serveur ?

J'ai vérifié, ce n'est pas le cas. C'est la réponse du terminal par modification.
 
sergeev:
J'ai vérifié, ça ne l'est pas. Par modification, c'est la réponse du terminal.
Merci, pour que je puisse me reposer.
 
Roman.:


1.EURUSD ou GBPUSD etc... - ça veut dire TOUT ... ticket=OrderSend( EURUSD, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0, clOpen) ;

2.sy=Symbol() ; ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0, clOpen) ; - cela signifie par affectation...

Cette fonction compétente - la fonction OpenPosition() en ligne - comprenez-la et collez-la dans votre code hibou et tout fonctionnera... peut-être aussi grâce à l'affectation...

Roman, merci pour votre aide et votre approche professionnelle :)
 
Dites-moi s'il existe une fonction/commande qui détermine la commission pour tous les ordres ouverts.
 

J'ai un problème avec le bouclage en utilisant une modification,

j'ai utilisé la modification fractale avec breakeven, j'ai obtenu des modifications infinies avec fractal et breakeven.

la modification est basée sur 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:
Dites-moi s'il existe une fonction/commande qui détermine la commission pour tous les ordres ouverts.
Pourquoi ne pas calculer vous-même le montant en utilisant la fonction OrderCommission() ?

Raison: