if ((Opb==0) && (MA_1_t > MA_2_t + Rastvor*Point)) // Если разница между
{ // ..МА 1 и 2 большая
Opn_B=true; // Критерий откр. Buy
Cls_S=true; // Критерий закр. Sell
Opb++;// Открытие только одного ордера
Ops=0;
if (VKO1>=Ask) {VP=VP*Koff;} // При прибыли предыдущего умножать на коэф.
if (VKO1<Ask) {VP=VP*Koff1;}// При убытке предыдущего умножать на коэф1.
}
if ((Ops==0) && (MA_1_t < MA_2_t - Rastvor*Point)) // Если разница между
{ // ..МА 1 и 2 большая
Opn_S=true; // Критерий откр. Sell
Cls_B=true; // Критерий закр. Buy
Ops++;// Открытие только одного ордера
Opb=0;
if (VKO0<=Bid) {VP=VP*Koff;} // При прибыли предыдущего умножать на коэф
if (VKO0>Bid) {VP=VP*Koff1;}// При убытке предыдущего умножать на коэф1
}
if ((Opn_S==true)||(Opn_B==true)) // Если есть сигнал на открытие ордера
{// Вычисляем объем умножая на VP
if (AccountBalance()<50000) Vol=Opn_Lots*VP;
if (AccountBalance()>50000) Vol=2*Opn_Lots*VP;
}
Non riesco a capire dove sia l'errore, per favore consigliatemi. Dice "non ci sono abbastanza soldi per comprare Lts=1.#INF".
Questo è il problema... Il numero di lotti cresce all'infinito, cioè l'aumento di volume è in loop, e per codice risulta essere un aumento una tantum...
Dopo di che per renderlo chiaro vedi sotto. e quindi lo stesso con Sell
if (Total==0 && Opn_B==true) // Открытых орд. нет
{ // критерий откр. BuyRefreshRates(); // Обновление данных
Min_Lot=MarketInfo(Symb,MODE_MINLOT); // Миним. колич. лотов
Free =AccountFreeMargin(); // Свободн средства
One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// Стоимость 1 лота
Step =MarketInfo(Symb,MODE_LOTSTEP); // Шаг изменен размера
Lts=MathFloor(Vol); // Для открытия Alert ("Lts ", Lts);
if(Lts < Min_Lot) Lts=Min_Lot; // Не меньше минимальнif (Lts*One_Lot < Free) Alert(" Не хватает денег на ", Lts," лотов"); // Лот дороже свободн.
SL=Ask-StopLoss_Open*Point; // Вычисление SL откр.
TP=Ask+TakeProfit_Open*Point; // Вычисление TP откр.Alert("Попытка открыть Buy. Ожидание ответа..");
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP); //Открытие Buyif (Ticket > 0) // Получилось :)
{
Alert ("Открыт ордер Buy ",Ticket);
VKO0=Ask; Opn_B =false; KO++;
Alert ("Цена открытия =", VKO0);
}
if (Fun_Error(GetLastError())==1) // Обработка ошибокcontinue; // Повторная попытка
}
Questo è il problema... Il numero di lotti cresce all'infinito, cioè l'aumento di volume è in loop, e per codice risulta essere un aumento una tantum...
Dopo di che per renderlo chiaro vedi sotto. e quindi lo stesso con Sell
Prova
if (Fun_Error(GetLastError())==0) // Нет ошибкиbreak;
Se c'è un errore, cercherà semplicemente di aprire di nuovo una posizione su un nuovo tick. A proposito, mi è stato spiegato qui su questo forum (p. 90-91) che è consigliabile non usare l'operatore && (e) in if.
Qualcuno sa come convertire il numero di pip in valuta?
cioè se il profitto è in unità di valuta, allora 50 pips dovrebbero essere convertiti in unità di valuta... cioè la leva dovrebbe essere presa in considerazione...? 0_о
paladino80, il problema non è aprire un ordine... funziona bene... Ho scremato questa parte per chiarire quali variabili del post del 01.05.12 19:15 sono state utilizzate ulteriormente...
il problema è questo (vedi sotto), è un'esecuzione una tantum e per qualche ragione Vol aumenta all'infinito, quindi il Lts aumenta all'infinito... non è chiaro... per favore vedi il post in questione e dimmi cosa c'è di sbagliato...
if ((Opn_S==true)||(Opn_B==true)) // Если есть сигнал на открытие ордера
{ // Вычисляем объем умножая на VPif (AccountBalance()<50000) Vol=Opn_Lots*VP;
if (AccountBalance()>50000) Vol=2*Opn_Lots*VP;
}
E controllare la sufficienza del deposito? https://docs.mql4.com/ru/constants/marketinfo
E controllare il lotto in uscita?
Questo è il problema... Il numero di lotti cresce all'infinito, cioè l'aumento di volume è in loop, e per codice risulta essere un aumento una tantum...
Dopo di che per renderlo chiaro vedi sotto. e quindi lo stesso con Sell
è un cosiddetto "pezzo unico"?
cap, è ovvio, c'è un ciclo.
Ciao!
Non riesco a trovare una risposta alla seguente domanda:
Se un ordine pend ente viene eseguito, il suo tipo è ancora lo stesso dell'ordine pendente o viene cambiato in OP_BUY o OP_SELL?
Questo è il problema... Il numero di lotti cresce all'infinito, cioè l'aumento di volume è in loop, e per codice risulta essere un aumento una tantum...
Dopo di che per renderlo chiaro vedi sotto. e quindi lo stesso con Sell
Se l'ordine pendente viene eseguito, è ancora lo stesso dell'ordine pendente o viene cambiato in OP_BUY o OP_SELL?
Qualcuno sa come convertire il numero di pip in valuta?
cioè se il profitto è in unità di valuta, allora 50 pips dovrebbero essere convertiti in unità di valuta... cioè la leva dovrebbe essere presa in considerazione...? 0_о
paladino80, il problema non è aprire un ordine... funziona bene... Ho scremato questa parte per chiarire quali variabili del post del 01.05.12 19:15 sono state utilizzate ulteriormente...
il problema è questo (vedi sotto), è un'esecuzione una tantum e per qualche ragione Vol aumenta all'infinito, quindi il Lts aumenta all'infinito... non è chiaro... per favore vedi il post in questione e dimmi cosa c'è di sbagliato...