向鉴赏家提问 - 页 12

 
rid писал(а)>>

我并不是这方面的专家。

但假设是,如果在第一个信号之后,你'挂'了旗子,那就让它挂着。

即使第1个信号已经用完了!

然后第2个信号会发出信号,顺利打开。

如果我对这个问题的理解是正确的...

但是,按照我的理解,旗子是一个变量,随着一个新的刻度,程序将看到初始或新计算的旗子值。也许我误解了什么是旗帜?

 
MQLBankir >> :

但是,按照我的理解,旗帜是一个变量,随着一个新的刻度,程序将看到旗帜的初始值或从新数据中计算出来的值。也许我误解了什么是旗帜?

标志是一个布尔常数,其值为真或假,数字表示分别为1或0。

如果条件1发出信号(如跨越2个轮子),则标志被设置为真,如果跨越尚未发生,标志将保持为假对于你的任务...它将看起来像这样。

bool signal1=true。

int start()

如果(signal1==false){return();}。

signal1 ......... tra la get signal

如果(signal1 ==true)//出现第一个信号

{

signal2 .............. tra la接收信号

signal1=false。

}

这样的事情应该发生)))

哦,我在写的时候,已经在下面定义了)

 
MQLBankir >> :

但是,按照我的理解,旗帜是一个变量,随着一个新的刻度,程序将看到旗帜的初始值或从新数据中计算出来的值。也许我误解了什么是旗帜?

我可以补充一点,全局声明的变量 会保存它们的值。

>>直到它们被强行改变或程序被关闭。

 

对国旗的保护是按以下方式进行的。

int flag;
int start()
{
 // функция принятия решения и установки флага
 if( flag==1)
  { flag=0;
   // код защищенный от запуска флагом   
  } 
return(0);
}
顺便说一下
// функция принятия решения и установки флага

可以在任何地方,根据作者的想法,用不同的行动顺序。

 
Urain писал(а)>>

对国旗的保护是按以下方式进行的。

顺便说一句

可以在任何地方,取决于作者的想法,而且它改变了行动的顺序。

>>谢谢大家,似乎已经想通了))。

 

晚上好。麻烦从某个地方下来了。

一个带马丁格尔的顾问。

10个步骤。每一步的位置都有一个不同的魔术师。

开始时,一切工作都很正常。几天来。

然而,突然间,它完全不工作了!

第一个仓位打开后,立即在下一个柱状体上关闭!这就是所谓的 "平仓"。

目前还不清楚原因。


而且,它还在继续。打开和关闭。

今天刚刚开始。突然间 !

这里是结尾 部分。

 //жжжжжжжжжжжж  Закрытие позиций жжжжжжжжжжжжжжжжжжжжжжж
 //(используются ф-и И.Кима
if ( NumberOfPositions(NULL,OP_BUY, -1)>0) {//если есть открытые позиции
// если цена открытия первой позиции меньше текущей цены на тейкпрофит - закрываем её 
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic  )+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic  )>0)  ClosePositions(NULL, OP_BUY, Magic );

// если цена открытия второй  позиции меньше текущей цены на тейкпрофит - закрываем её 
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_2)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_2)>0) ClosePositions(NULL, OP_BUY, Magic_2);

 // если цена открытия след.  позиции меньше текущей цены на тейкпрофит - закрываем всё открытые позиции  
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_3)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_3)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_4)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_4)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);    
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_5)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_5)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);   
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_6)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_6)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);    
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_7)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_7)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);   
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_8)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_8)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);    
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_9)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_9)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_10)+ TakeProfit_Buy*Point)<=Bid&& PriceOpenLastPos(NULL, OP_BUY, Magic_10)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);  

 } 

也许有人会看到不准确或错误的地方?(按持仓价格计算)

 

rid писал(а) >>

目前还不清楚原因。

会不会有人突然看到任何不准确或错误的地方?

问题可能不在这段代码,而是在开仓或计算 TakeProfit_Buy。更有可能的是,它是后者。

如果它在测试器中播放,打印应该有帮助。

 

我没有计算TakeProfit_Buy - 我只是在外部参数中设置它。

extern int       TakeProfit_Buy=21;

在测试器中--同样的废话。但在一些地方。 起初,一切都很正常。

然后就出现了这个狗屎。而且并不总是如此。

我必须插入一个评论或打印...

此外。在我还是个菜鸟的时候,我从未尝试过使用这种魔法,但我从未忘记。

 

我想我弄错了。当然,也完全不是我原来要找的地方。

除了上述封闭,我还有这个。

//----------------------- Закрытие позиций по текй профиту ----------------------------------

if ( NumberOfPositions(NULL,OP_BUY, -1)>0) {// если есть открытые позиции
// если очередная  позиция закрылась по тейкпрофиту , то закрываем
// все остальные позиции  
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_3 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_4 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}    
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_5 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}   
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_6 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}    
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_7 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}   
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_8 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}    
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_9 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_10))  { ClosePosFirstProfit(NULL, OP_BUY, -1);} 
                                           }

事实证明,函数标志
isCloseLastPosByTake( )//если поза закрылась по тейку - возвращает единицу
在其执行后等于1,但在所有其他位置被关闭后,它仍然等于1!当然,当下一个具有神奇数字=神奇数字的第一个位置被打开--它被立即关闭!

只是不清楚为什么这个错误两天都没有出现?

//--------------------------------------------------------------

还有。你能告诉我,我怎样才能使这个模块正常工作?

换句话说,如何在关闭所有头寸后重置函数isCloseLastPosByTake()?

 
rid >> :

换句话说,我如何在所有头寸都被平仓后重置isCloseLastPosByTake()函数?

据我所知,获利平仓的开仓时间应该比其余小订单的开仓时间长,加上这个条件,一切都会变得很酷。