[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 268

 

extern string AlliesO1 = "GBPUSD"; - валюта

string AlliesO[5]; - массив в котором хранятся валюты.



Так я проверяю нужно ли добавлять валюту в массив. (Изначально вместо валют нули, всего валют 5)

if (StringLen (AlliesO1)>2)
{
CountAlliesO++;
AlliesO [0] = AlliesO1;
}





Потом в цикле перебираю валюты и на каждой валюте открываю ордер.

for (int i=0;i<CountAlliesO;i++)

{
l_ticket_4 = OrderSend(AlliesO[i], OP_BUY, Lots, NormalizeDouble(Ask, Digits), l_slippage_8, iif(StopLoss == 0.0, 0, NormalizeDouble(Ask - StopLoss / MathPow(10, Digits), Digits)), iif(TakeProfit == 0.0, 0, NormalizeDouble(Ask +
TakeProfit / MathPow(10, Digits), Digits)), 0, Magic, 0, CLR_NONE);
Print ("Ticket " + Allies[i] + ": " + l_ticket_4);
}



Вот что выдает:

22:05:25 RSI_Valut_Test2 EURUSD,H1: CountAlliesO: 2
22:05:25 RSI_Valut_Test2 EURUSD,H1: CountEnemyO: 2
22:05:25 RSI_Valut_Test2 EURUSD,H1: Allies: GBPUSD // - в цикле распечатываю AlliesO[i].
22:05:25 RSI_Valut_Test2 EURUSD,H1: Allies: GBPUSD
22:05:25 RSI_Valut_Test2 EURUSD,H1: Enemy: USDCHF
22:05:25 RSI_Valut_Test2 EURUSD,H1: Enemy: USDCHF
22:05:25 RSI_Valut_Test2 EURUSD,H1: Ticket USDCHF: -1

22:05:25 RSI_Valut_Test2: symbol name for OrderSend function must be a string


Ну в общем как-то так, код весь не могу дать, т.к. просили не распространять... Ну там еще всунуты пару принтов, которые и выводят эти данные... в общем почему выдает что это не строка? если везде объявлена как строка?


Помогите пожалуйста, заранее спасибо.

 

Всем добрый вечер. Подскажите как правельно написать функцию закрытия ордера через несколько баров после открытия, и чтоб можно было это количество оптимизировать. заранее спасибо.

 

CountBars - количество баров.

Ticket - номер ордера.

CloseAfterSomeBar (int CountBars, int Ticket)

{
OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES)
datetime date = OrderOpenTime();
int BarShift = iBarShift (Symbol(), 0, date, false);
if (CountBars>=BarShift)
{
if (OrderType() = OP_BUY)
OrderClose(Ticket,OrderLots(),Bid, (Ask - Bid) / Point, CLR_NONE);
else
OrderClose(Ticket,OrderLots(),Ask, (Ask - Bid) / Point, CLR_NONE);
}
}


Запускать на каждом тике, с количеством баров не уверен, там может быть -1, или +1, т.к. не знаю точно смещение как считается... ну проверить на М1 не сложно...

Так что-ли?

 
PODLIY16:

CountBars - количество баров.

Ticket - номер ордера.

CloseAfterSomeBar (int CountBars, int Ticket)

{
OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES)
datetime date = OrderOpenTime();
int BarShift = iBarShift (Symbol(), 0, date, false);
if (CountBars>=BarShift)
{
if (OrderType() = OP_BUY)
OrderClose(Ticket,OrderLots(),Bid, (Ask - Bid) / Point, CLR_NONE);
else
OrderClose(Ticket,OrderLots(),Ask, (Ask - Bid) / Point, CLR_NONE);
}
}


Запускать на каждом тике, с количеством баров не уверен, там может быть -1, или +1, т.к. не знаю точно смещение как считается... ну проверить на М1 не сложно...

Так что-ли?

 
isaev-av:

наверное. я не программист. сейчас попробую. главное чтоб на ТФ работало.
 
void CloseAfterSomeBar (int CountBars, int Ticket)
{
OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES);
datetime date = OrderOpenTime();
int BarShift = iBarShift (Symbol(), 0, date, false);
if (BarShift>=CountBars)
{
if (OrderType() == OP_BUY)
OrderClose(Ticket,OrderLots(),Bid, (Ask - Bid) / Point, CLR_NONE);
else
OrderClose(Ticket,OrderLots(),Ask, (Ask - Bid) / Point, CLR_NONE);
}
}


Вот это правильное, закрывает ордер как только откроется нужный бар, например на М1 только что пробовал, ордер открылся на девятой минуте, закрылся в 11:01.

 
Подскажите как на индикаторы RSI или Stohastic наложить МА т.е. МА взять не от графика, а от индикатора?
 
Что то не получяется. Может быть кто советник поправит?. Всем добрый вечер. Подскажите как правельно написать функцию закрытия ордера через несколько баров после открытия, и чтоб можно было это количество оптимизировать. заранее спасибо.
Файлы:
 

Попробуйте так там 2 новые переменные:


extern bool IfTrueThenCountBarWork = false; // - если стоит false, то эта функция работать не будет, чтобы работала нужно обязательно ставить true.

extern int CountBar = 0; // - количество баров после которого закрывать. Как считаются бары писал выше.


Надеюсь чем-то помог.

Файлы:
 
PODLIY16:

Попробуйте так там 2 новые переменные:


extern bool IfTrueThenCountBarWork = false; // - если стоит false, то эта функция работать не будет, чтобы работала нужно обязательно ставить true.

extern int CountBar = 0; // - количество баров после которого закрывать. Как считаются бары писал выше.


Надеюсь чем-то помог.




Спасибо!
Причина обращения: