[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 509
edyuson: Как зделать, чтоб не сразу умножал, а скажем через два-три раза? Пример: лот=0,01, еще - 0,01, еще - 0,01 и только после умножать. Подскажите, если не много возни. Спасибо.
sergeev:
fazer um contador int e acrescentar +1 em cada abertura.
Uma vez definido o valor correto do contador, deixar fazer também o lote*koef.
Sim, não é tão fácil quanto eu pensava, agora está começando a ocorrer. E o ciclo: lote-0.01, lote-0.01, lote-0.01 e somente depois de multiplicar lote-0.02, lote-0.02, lote-0.02 mais: lote-0.04, lote-0.04, lote-0.04 .... deve ser interrompido pelo lucro e continuar com lotes. Havia algumas variantes dos caras no outro fórum sobre isso: Você poderia declarar duplo koef[]={ 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1 . 0, 1.0, 2.0 .......} - como uma matriz, preenchendo-a com os coeficientes necessários, e uma variável estática ou global int k=0; Depois lot=lot*koef[k++]; Série inicial: k=0;
e tais: int k = 1; int koef = 3; if (k/koef == k) { lot*=2; k++; } mas tudo está errado.
Eu tentei um contador como: int j; for(j=0; j<15; j++) , mas novamente não é o mesmo. Aqui está tudo: int X=0; double S = 0,0000; external double lot=0,01; external double koef=2,0; external int SL=30; external int TP=120; double dl; double a; int init() { a=lot; return(0); } int deinit() { return(0); }
if(OrdersTotal() == 0 && X===2) { if (Close[0]<dl){lot=a;} X=0; }
se (OrderTotal() == 0 && Close[1]>Open[1]) { dl=Close[0]; OrderSend(Symbol(),OP_BUY,lot,Ask,3,Ask-SL*0.0001,Ask+TP*0.0001,",14774,0,Blue); //
lot=lot*koef; X=1; }
if(OrdersTotal() == 0 && Close[1]<Open[1]) { dl=Close[0]; OrderSend(Symbol(),OP_SELL,lot,Bid,3,Bid+SL*0.0001,Bid-TP*0.0001,",14774,0,Red); //sudy some haler may help lot=lot*koef;
Obrigado, mas veja, há dois preços, um é o preço de abertura do pedido, e o outro é o preço de stop loss, o número de pontos para o stop loss e o preço do ponto são conhecidos. Como calcular o tamanho do lote para que a perda seja de 10% do depósito se o preço atingir o limite de perda? Eu simplesmente não sou bom com números.
Eu também não entendo
Para taxas cruzadas, o valor do ponto, expresso em dólares, é calculado pela fórmula PIP = LOT_SIZE * TICK_SIZE * BASE_QUOTE / CURRENT_QUOTE, onde LOT_SIZE é o tamanho do lote, TICK_SIZE é o tamanho do tick, BASE_QUOTE é a cotação atual da moeda base (primeira) para o dólar americano, CURRENT_QUOTE é a cotação atual do par.
Como você entende esta primeira moeda para o dólar americano?
a moeda base (primeira) para o dólar americano, é, no exemplo GBP para JPY - GBP/JPY, seriaGBP/USD
Rediz este script, que é o que você precisa com o cálculo do volume da posição negociada, dependendo da quantidade de capital e do tamanho do stop-loss.
Você também precisa dele - "Eu enfrentei um problema e já estou lutando há três dias e não consigo resolvê-lo". No Expert Advisor acabado, decidi, em vez de um lote para entrar na % de risco, então preciso calcular o lote para parar, por exemplo, a 10 000 depo o risco de 1% em uma parada de 100 pontos será cerca de 0,1 lote e aqui a 200 parada de lote o lote deve ser 0,05, então o risco de 1% permaneceu no mesmo nível. Espero que tudo esteja claro. E aqui você está escrevendo:
"Como calcular o tamanho do lote para que a perda seja igual a 10% do depósito, por exemplo, se o preço atingir um stop loss? Eu simplesmente não sou bom com números".
Portanto, modifiquei a função de cálculo de lote a partir do tutorial - sua descrição e abordagem é a mesma, somente que ao invés de cálculo de lote por porcentagem do tamanho do depósito, o lote negociado é calculado exatamente pelas suas (dadas por mim neste exemplo - ver script, link acima) condições:
externstring A0 = "Параметры ММ и мониторинга";
externdouble Lots = 0; // Стартовый лот = 0 для использования максимального риска на капитал в процентах, в зависимости от величины стоп-лоссаexternint StopLoss = 1000;
externint TakeProfit =4000; // TakeProfit для новых ордеров (пунктов)externdouble MaxRisk = 10; // риск на капитал в %// рассчитываем объем позиции взависимости от размера стопа, при заданном риске// например при депо 10 000 риск 1% при стопе 100 пп это будет примерно лот 0.1,// при стопе 200 пп уже лот должен быть 0.05, для того чтобы риск 1% остался на том же уровнеint start()
{
//----------------------------------СТАРТ-------------------------------------------------------------------------------------
// ...
//----------------------------------Расчет объема лота------------------------------------------------------------------------ if (Lot(StopLoss)==false)
{
Comment(" Пополните счет. Не хватает средств на минимальный лот. Советник остановлен.");// Если средств не хватает на мин, то выходPrint ("Не хватает средств на минимальный лот. Lots_New = ",Lots_New, " AccountFreeMargin() = ", AccountFreeMargin());
// Если средств не хватает на мин, то выходreturn (0);
}
// ---------НОРМАЛИЗУЕМ НОВЫЕ РАСЧЕТНЫЕ ЛОТЫ И ОТКРЫВАЕМ ОЧЕРЕДНУЮ ПОЗИЦИЮ...
Lots_New = NormalizeLots(Lots_New);
//... здесь условия на открытие поз и установка ордеров
}//------------------------------------------Конец Старт-----------------------------------------------------//+------------------------------------------------------------------+//| Нормализация лота |//+------------------------------------------------------------------+double NormalizeLots(double lot)
{
double lotStep = MarketInfo(Symbol(), MODE_LOTSTEP);
double lots = NormalizeDouble(lot / lotStep, 0) * lotStep;
lots = MathMax(lots, MarketInfo(Symbol(), MODE_MINLOT));
lots = MathMin(lots, MarketInfo(Symbol(), MODE_MAXLOT));
return (lots);
}
//--------------------------------------------------------------------// Lot.mqh// //--------------------------------------------------------------- 1 --// Функция вычисления количества лотов.// Глобальные переменные:// double Lots_New - количество лотов для новых ордеров (вычисляется)// double Lots - желаемое количество лотов, заданное пользовател.// double MaksRisk - процент риска// Возвращаемые значения:// true - если средств хватает на минимальный лот// false - если средств не хватает на минимальный лот//--------------------------------------------------------------- 2 --bool Lot(int sl) // Позовательская ф-ия
{
string Symb =Symbol(); // Финансовый инструм.double One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);//Стоим. 1 лотаdouble Min_Lot=MarketInfo(Symb,MODE_MINLOT);// Мин. размер. лотовdouble Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
double Step =MarketInfo(Symb,MODE_LOTSTEP);//Шаг изменен размераdouble Free =AccountFreeMargin(); // Свободные средстваdouble LotVal =MarketInfo(Symbol(),MODE_TICKVALUE);//стоимость 1 пункта для 1 лота//--------------------------------------------------------------- 3 --if (Lots > 0) // Лоты заданы явно..
{ // ..проверим этоdouble Money=Lots*One_Lot; // Стоимость ордераif(Money<=AccountFreeMargin()) // Средств хватает..
Lots_New=Lots; // ..принимаем заданноеelse// Если не хватает..
Lots_New=MathFloor(Free/One_Lot/Step)*Step;// Расчёт лотов
}
//--------------------------------------------------------------- 4 --else// Если лоты не заданы
{ // то берём процент // Желаем. колич.лотов:
Lots_New =MathFloor((Free*MaxRisk/100)/(sl*LotVal)/Step)*Step;
if(Lots_New<Min_Lot) Lots_New=Min_Lot;
if(Lots_New>Max_Lot) Lots_New=Max_Lot;
Print ("Lot_New в ф-ии Lots = ",Lots_New, "ширина канала = ",sl, "Point = ",Point);
}
//--------------------------------------------------------------- 5 --if (Lots_New < Min_Lot) // Если меньше допуст..
Lots_New=Min_Lot; // .. то миниамальныйif (Lots_New*One_Lot > AccountFreeMargin()) // Не хватает даже..
{ // ..на минимальн. лот:(Print ("Не хватает средств на минимальный лот. Lots_New = ",Lots_New, " AccountFreeMargin() = ", AccountFreeMargin()); // Сообщение..return(false); // ..и выход
}
return(true); // Выход из польз. ф-ии
}
//--------------------------------------------------------------- 6 --
Eu tentei este método. Agora, durante todo o período de testes, um pedido STOPLOSS pendente foi aberto e é isso... talvez meu terminal esteja com problemas?
O programa deve encontrar preços máximos e mínimos todos os dias, das 7 às 9 horas da manhã e colocar uma ordem de parada nestes níveis.
Eu tentei este método. Agora, durante todo o período de testes, um pedido STOPLOSS pendente foi aberto e é isso... talvez meu terminal esteja com problemas?
Você tem dificuldade em olhar no tronco para ver o que exatamente está falhando?
Eu tenho uma conta demo com um EA com código no gráfico:
Ele escreve no diário de bordo: "Esta é uma demonstração.
Tenho uma demonstração em um phibogroup - por alguma razão misteriosa, diz que estou em uma conta real. Em sua versão ele mostra - Isto não é uma demonstração.
Acontece que, de alguma forma, o CD em si é pervertido
edyuson:
sergeev:Как зделать, чтоб не сразу умножал, а скажем через два-три раза? Пример: лот=0,01, еще - 0,01, еще - 0,01 и только после умножать. Подскажите, если не много возни. Спасибо.
fazer um contador int e acrescentar +1 em cada abertura.
Uma vez definido o valor correto do contador, deixar fazer também o lote*koef.
Sim, não é tão fácil quanto eu pensava, agora está começando a ocorrer. E o ciclo: lote-0.01, lote-0.01, lote-0.01 e somente depois de multiplicar lote-0.02, lote-0.02, lote-0.02 mais: lote-0.04, lote-0.04, lote-0.04 .... deve ser interrompido pelo lucro e continuar com lotes. Havia algumas variantes dos caras no outro fórum sobre isso: Você poderia declarar duplo koef[]={ 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1 . 0, 1.0, 2.0 .......} - como uma matriz, preenchendo-a com os coeficientes necessários, e uma variável estática ou global int k=0;
Depois lot=lot*koef[k++]; Série inicial: k=0;
e tais:
int k = 1;
int koef = 3;
if (k/koef == k) { lot*=2; k++; } mas tudo está errado.
Eu tentei um contador como: int j;
for(j=0; j<15; j++)
, mas novamente não é o mesmo. Aqui está tudo:
int X=0;
double S = 0,0000;
external double lot=0,01;
external double koef=2,0;
external int SL=30;
external int TP=120;
double dl;
double a;
int init()
{
a=lot;
return(0);
}
int deinit()
{
return(0);
}
int start()
{
if(OrdersTotal() == 0 && X===1)
{
if (Close[0]>dl){lot=a;}
X=0;
}
if(OrdersTotal() == 0 && X===2)
{
if (Close[0]<dl){lot=a;}
X=0;
}
se (OrderTotal() == 0 && Close[1]>Open[1])
{
dl=Close[0];
OrderSend(Symbol(),OP_BUY,lot,Ask,3,Ask-SL*0.0001,Ask+TP*0.0001,",14774,0,Blue);
//
lot=lot*koef;
X=1;
}
if(OrdersTotal() == 0 && Close[1]<Open[1])
{
dl=Close[0];
OrderSend(Symbol(),OP_SELL,lot,Bid,3,Bid+SL*0.0001,Bid-TP*0.0001,",14774,0,Red);
//sudy some haler may help
lot=lot*koef;
X=2;
}
}
return(0);
//É apenas um martin
Obrigado, mas veja, há dois preços, um é o preço de abertura do pedido, e o outro é o preço de stop loss, o número de pontos para o stop loss e o preço do ponto são conhecidos. Como calcular o tamanho do lote para que a perda seja de 10% do depósito se o preço atingir o limite de perda? Eu simplesmente não sou bom com números.
Eu também não entendo
Para taxas cruzadas, o valor do ponto, expresso em dólares, é calculado pela fórmula
PIP = LOT_SIZE * TICK_SIZE * BASE_QUOTE / CURRENT_QUOTE,
onde LOT_SIZE é o tamanho do lote, TICK_SIZE é o tamanho do tick, BASE_QUOTE é a cotação atual da moeda base (primeira) para o dólar americano, CURRENT_QUOTE é a cotação atual do par.
Como você entende esta primeira moeda para o dólar americano?
Sim... apertado... :-)
a moeda base (primeira) para o dólar americano, é, no exemplo GBP para JPY - GBP/JPY, seriaGBP/USD
Rediz este script, que é o que você precisa com o cálculo do volume da posição negociada, dependendo da quantidade de capital e do tamanho do stop-loss.
Você também precisa dele - "Eu enfrentei um problema e já estou lutando há três dias e não consigo resolvê-lo". No Expert Advisor acabado, decidi, em vez de um lote para entrar na % de risco, então preciso calcular o lote para parar, por exemplo, a 10 000 depo o risco de 1% em uma parada de 100 pontos será cerca de 0,1 lote e aqui a 200 parada de lote o lote deve ser 0,05, então o risco de 1% permaneceu no mesmo nível. Espero que tudo esteja claro. E aqui você está escrevendo:
"Como calcular o tamanho do lote para que a perda seja igual a 10% do depósito, por exemplo, se o preço atingir um stop loss? Eu simplesmente não sou bom com números".
Portanto, modifiquei a função de cálculo de lote a partir do tutorial - sua descrição e abordagem é a mesma, somente que ao invés de cálculo de lote por porcentagem do tamanho do depósito, o lote negociado é calculado exatamente pelas suas (dadas por mim neste exemplo - ver script, link acima) condições:
Eu tentei este método. Agora, durante todo o período de testes, um pedido STOPLOSS pendente foi aberto e é isso... talvez meu terminal esteja com problemas?
O programa deve encontrar preços máximos e mínimos todos os dias, das 7 às 9 horas da manhã e colocar uma ordem de parada nestes níveis.
Eu tentei este método. Agora, durante todo o período de testes, um pedido STOPLOSS pendente foi aberto e é isso... talvez meu terminal esteja com problemas?
Olá.
Alguém teve algum problema com a função
IsDemo()?
Sempre consigo 1 resultado - que a conta é real (não importa se é real ou demo).
Olá.
Alguém teve algum problema com a função
?
Sempre recebo 1 resultado - minha conta é real (não importa se é real ou demo).
Coloco um EA em um gráfico com um código em uma conta demo:
Escreve na revista: "Esta é uma demonstração.Eu tenho uma conta demo com um EA com código no gráfico:
Ele escreve no diário de bordo: "Esta é uma demonstração.Tenho uma demonstração em um phibogroup - por alguma razão misteriosa, diz que estou em uma conta real. Em sua versão ele mostra - Isto não é uma demonstração.
Acontece que, de alguma forma, o CD em si é pervertido
Tenho uma demonstração sobre o phibogroup - por alguma razão misteriosa, diz que estou no real. Em sua versão da foto - Não é uma demonstração.
Acontece que, de alguma forma, o CD em si se tornou pervertido
Alguns corretores têm um servidor tanto para demonstração quanto para real. Verifique com o departamento de suporte do seu corretor.
Obrigado.