标签: volatility

引用赋值是原子的,为什么需要Interlocked.Exchange(ref Object,Object)?

在我的多线程ASMX web服务,我有我自己的类型SystemData的类别字段_allData它由数List<T>Dictionary<T>标记为volatile.系统data(_allData)会偶尔刷新一次,我会通过创建另一个被调用的对象newData并用新数据填充它的数据结构来实现.当它完成后我就分配了

private static volatile SystemData _allData

public static bool LoadAllSystemData()
{
    SystemData newData = new SystemData();
    /* fill newData with up-to-date data*/
     ...
    _allData = newData.
} 
Run Code Online (Sandbox Code Playgroud)

这应该工作,因为赋值是原子的,并且具有对旧数据的引用的线程继续使用它,而其余的在分配之后具有新的系统数据.然而,我的同事说,volatile我应该使用,而不是使用关键字和简单的InterLocked.Exchange分配,因为他说在某些平台上,不能保证引用赋值是原子的.另外:当我宣布the _allData字段volatile

Interlocked.Exchange<SystemData>(ref _allData, newData); 
Run Code Online (Sandbox Code Playgroud)

产生警告"对易变场的引用不会被视为不稳定的"我应该怎么看待这个?

c# multithreading atomicity volatility

104
推荐指数
4
解决办法
3万
查看次数

无法覆盖具有非易失性上限的类型


我在scala中有一个编译器错误,我不知道它引用了什么:
假设这些声明:

trait Abstract {
  type MyType
}
trait AInner
trait A extends Abstract{
  type MyType <: AInner
}
trait BInner {
  def bMethod : Int
}
trait B extends Abstract with A{
  override type MyType <: BInner with A#MyType
}
Run Code Online (Sandbox Code Playgroud) 我在这里尝试实现的(在trait中B)是进一步限制MyType声明的类型Abstract,因此任何类型的值都MyType必须扩展MyTypemixin树中的所有s.

编译器给我这个消息(如标题所示): 类型MyType是一个易失性类型; 不能覆盖具有非易失性上限的类型.我理解,类型易变性在这里发生是因为类型连接with A#MyType,错误的一部分:具有非易失性上限的类型可能是指类型声明type MyType <: AInner,其中AInner不是抽象类型,因此是非易失性的.

为什么我不能这样做?有办法,如何实现我的目标?

types scala volatility type-bounds non-volatile

9
推荐指数
1
解决办法
945
查看次数

IMMUTABLE,STABLE和VOLATILE关键字如何影响函数的行为?

我们编写了一个get_timestamp()定义为的函数

CREATE OR REPLACE FUNCTION get_timestamp()
  RETURNS integer AS
$$
SELECT (FLOOR(EXTRACT(EPOCH FROM clock_timestamp()) * 10) - 13885344000)::int;
$$
LANGUAGE SQL;
Run Code Online (Sandbox Code Playgroud)

这在INSERT和UPDATE上用于输入或编辑数据库记录中已创建和已修改字段中的值.但是,我们发现连续添加或更新记录时它返回的值相同.

在检查pgAdmin III中的函数时,我们注意到在运行SQL来构建函数时,在LANGUAGE SQL语句之后注入了关键字IMMUTABLE.该文件指出默认是挥发性的(如果一个都没有出现,VOLATILE是默认的假设),所以我不知道为什么IMMUTABLE注射,然而,改变这种稳定解决了重复值的问题.

注意:如接受的答案中所述,IMMUTABLE永远不会被pgAdmin或Postgres添加到函数中,并且必须在开发期间添加.

我猜测正在发生的事情是这个函数正在被评估并且结果被缓存用于优化,因为它被标记为IMMUTABLE指示Postgres引擎在给定相同(空)参数列表的情况下返回值不应该改变.但是,当在触发器中未使用时,直接在INSERT语句中使用时,该函数将返回一个不同的值五次,然后再返回相同的值.这是由于某些优化算法会出现类似"如果在会话中多次使用IMMUTABLE函数5次,请将结果缓存以供将来调用"?

关于如何在Postgres函数中使用这些关键字的任何说明将不胜感激.对于我们来说STABLE是正确的选择,因为我们在触发器中使用了这个函数,或者还有更多要考虑的东西,例如文档说:

(对于希望查询当前命令修改的行的AFTER触发器不合适.)

但我并不清楚原因.

database postgresql timestamp function volatility

8
推荐指数
1
解决办法
5697
查看次数

Windows中的原子性,波动性和线程安全性

这是我对原子性的理解,它用于确保一个值可以整体而不是部分地读/写.例如,64位值实际上是两个32位DWORD(假设此处为x86),在线程之间共享时必须是原子的,以便同时读/写两个DWORD.这样一个线程就无法读取未更新的半变量.你如何保证原子性?

此外,我的理解是,波动性根本不能保证线程安全.真的吗?

我已经看到它暗示许多只是原子/易失性的地方是线程安全的.我不知道那是怎么回事.我是否还需要一个内存屏障来确保在实际可以保证在另一个线程中读/写之前,读/写任何原子或其他值?

例如,假设我创建了一个挂起的线程,做一些计算将一些值更改为线程可用的结构然后恢复,例如:

HANDLE hThread = CreateThread(NULL, 0, thread_entry, (void *)&data, CREATE_SUSPENDED, NULL);
data->val64 = SomeCalculation();
ResumeThread(hThread);
Run Code Online (Sandbox Code Playgroud)

我想这将取决于ResumeThread中的任何内存障碍?我应该为val64进行互锁交换吗?如果线程正在运行,那会怎么改变呢?

我确定我在这里问了很多,但基本上我想弄清楚的是我在标题中提出的问题:对Windows中的原子性,波动性和线程安全性的一个很好的解释.谢谢

windows multithreading thread-safety atomicity volatility

6
推荐指数
1
解决办法
164
查看次数

解析R:Quantmod应用程序中的引号

我正在尝试创建在从雅虎获取符号后提供历史波动的函数.但是,当我将输出传递给波动率函数时,它不喜欢它; Get变量被赋予一个带引号的向量,例如"SPY",但波动率函数只需要没有引号(SPY没有"SPY").我尝试使用noquote()取消引号,现在出现以下错误:

log(x)中的错误:数学函数的非数字参数

我的代码

require(quantmod)

vClose = function(X){
Get <- getSymbols(X, from="2000-01-01", src="yahoo")
Set <- noquote(Get)
volatility(Set, calc="close")
}
Run Code Online (Sandbox Code Playgroud)

任何帮助都会很棒.

quotes r volatility quantmod

5
推荐指数
1
解决办法
699
查看次数

R中GARCH的模拟

我正在模拟GARCH模型.模型本身并不太相关,我想问你的是如何在R中优化模拟.如果你看到任何矢量化的空间,我已经考虑过但我看不到它.到目前为止我所拥有的是:

让:

#    ht=cond.variance in t
#    zt= random number 
#    et = error term
#    ret= return
#    Horizon= n periods ahead
Run Code Online (Sandbox Code Playgroud)

所以这是代码:

randhelp= function(horizon=horizon){
    ret <- zt <- et <- rep(NA,horizon)#initialize ret and zt et
    for( j in 1:horizon){
      zt[j]= rnorm(1,0,1)
      et[j] = zt[j]*sqrt(ht[j])
      ret[j]=mu + et[j]

      ht[j+1]= omega+ alpha1*et[j]^2 + beta1*ht[j]
    }
    return(sum(ret))
  }
Run Code Online (Sandbox Code Playgroud)

我想从现在开始模拟5个周期的回报,所以我将运行这个让我们说10000.

#initial values of the simulation
ndraws=10000
horizon=5 #5 periods ahead
ht=rep(NA,horizon) #initialize ht
ht[1] = 0.0002
alpha1=0.027
beta1 =0.963
mu=0.001
omega=0


sumret=sapply(1:ndraws,function(x) …
Run Code Online (Sandbox Code Playgroud)

r time-series volatility

5
推荐指数
2
解决办法
5268
查看次数

R-建模多元GARCH(rugarch和ccgarch)

第一次在这里提出问题时,我会尽力做到明确-但请告知我是否应该提供更多信息!其次,这是一个漫长的问题...希望很容易为某人解决;)!因此,我使用“ R”基于某些论文对多元GARCH模型进行建模(Manera等人,2012年)。

我用均值方程中的外部回归模型对恒定条件相关(CCC)和动态条件相关(DCC)模型进行建模。对于带有外部回归变量的单变量GARCH,使用“ R”版本3.0.1和“ rugarch”版本1.2-2软件包,以及对CCC / DCC模型使用“ ccgarch”软件包(版本0.2.0-2)。(我目前正在研究“ rmgarch”软件包-但这似乎仅用于DCC,我也需要CCC模型。)

我的模型平均方程式有问题。在上面提到的论文中,CCC和DCC模型之间的均值方程的参数估计值发生了变化!而且我不知道我将如何在R中执行此操作...(目前,在Google上以及Tsay的书“财务时间序列分析”和Engle的书“预期相关性”中查找我的错误)

我的意思是“我的平均方程在CCC和DCC模型之间不变”,它表示以下内容:我为带有打包rugarch的n = 5时间序列指定了单变量GARCH。然后,我使用GARCH的估算参数(ARCH + GARCH术语),并将其用于CCC和DCC函数“ eccc.sim()”和“ dcc.sim()”。然后,从eccc.estimation()和dcc.estimation()函数中,我可以获取方差方程以及相关矩阵的估计。但不是针对均值方程。

我仅针对单变量模型和CCC模型发布R代码(可复制的代码和我的原始代码)。已经感谢您阅读我的帖子!!!!

注意:在下面的代码中,“ data.repl”是昏暗的843x22的“ zoo”对象(9种每日商品返回系列和说明变量系列)。多元GARCH仅适用于5系列。

可复制的代码:

# libraries:
library(rugarch)
library(ccgarch)
library(quantmod)
# Creating fake data:
dataRegr <- matrix(rep(rnorm(3149,  11, 1),1), ncol=1, nrow=3149)
dataFuelsLag1 <- matrix(rep(rnorm(3149, 24, 8),2), ncol=2, nrow=3149)
#S&P 500 via quantmod and Yahoo Finance
T0 <- "2000-06-23"
T1 <- "2012-12-31"
getSymbols("^GSPC", src="yahoo", from=T0, to=T1)
sp500.close <- GSPC[,"GSPC.Close"], 
getSymbols("UBS", src="yahoo", from=T0, to=T1)
ubs.close <- UBS[,"UBS.Close"]
dataReplic <- merge(sp500.close, ubs.close, all=TRUE)
dataReplic[which(is.na(dataReplic[,2])),2] <- 0 …
Run Code Online (Sandbox Code Playgroud)

r time-series volatility multivariate-testing

5
推荐指数
1
解决办法
9847
查看次数

当不相关的单元格被删除时,需要停止重新计算UDF

我注意到,每当我删除单元格时,我的UDF都会重新计算.这会在删除整个列时导致大量延迟,因为UDF会为其使用的每个单元调用.因此,如果您使用1000 UDFS,则删除列或单元将调用1000次.

举例来说,将以下UDF放在一个模块中,然后使用= HelloWorld()从工作表中多次调用它

Function HelloWorld()
HelloWorld = "HelloWorld"
Debug.Print Now()
End Function
Run Code Online (Sandbox Code Playgroud)

然后删除一行.如果您的体验与我的一样,您会看到每次使用都会调用一次.

任何人都有任何想法是否可以停止这种行为?我也有兴趣为什么它应该被调用.看起来像Excel的依赖树中的缺陷对我来说,但可能有一个很好的理由.

编辑:经过实验,我发现了更多触发UDFS的操作:

  1. ListObject(即Excel表)跨越调整大小(但不是行)的数的任何更改.即使UDF本身不在ListObject中,或者实际上在任何 ListObject中也是如此.
    1. 在工作表中的任何位置添加新单元格或列(但不是行).

请注意,手动计算模式不是多个方面的选项.

第一,鉴于它是一个应用程序级别的设置,它只会带来太大的风险,即有人会使用他们碰巧打开的任何一个电子表格的输出,而不会意识到它们处于手动计算模式.

其次,我实际上并没有设计一个特定的电子表格,而是正在编写一本关于非开发人员如何利用编写良好的现成代码(如UDF)来执行本来可能超出他们的事情的书.示例包括动态连接或拆分文本,或Charles Williams概述的完全匹配二进制搜索UDF,请参阅https://fastexcel.wordpress.com/2011/07/22/developing-faster-lookups-part-2-how-to- build-a-faster-vba-lookup / (是的,我给他们很多警告,通常一个基于公式的原生解决方案将胜过UDF.但正如你从上面引用的线程中看到的那样,仔细编写函数可以表现得很好).

我不知道用户将如何使用这些.

在没有编程解决方案的情况下,看起来我只需要在书中指出,如果用户使用资源密集型UDFS,用户在添加或删除单元格时可能会遇到严重延迟或调整ListObjects的大小.即使这些UDF被有效写入.

excel vba volatility udf

5
推荐指数
2
解决办法
1566
查看次数

R rugarch 求解器无法收敛

我想使用优秀的rugarch包在两个不同的时间序列上估计 EGARCH 模型,但求解器无法收敛。我不想使用“混合”求解器选项,因为这会在循环通过“gosolnp”求解器时引入随机性。我的两个问题是:(1)我的数据是否有一些奇怪的东西导致收敛失败,(2)如果没有,有没有办法修改ugarchfit()函数,以便它“更努力地”找到解决方案?以下是我正在使用的数据和代码。

library("rugarch")

ABC <- c(-0.003311,-0.009967,-0.010067,-0.023729,0.006944,-0.010345,0.02439,-0.006803,-0.017123,-0.003484,0.017483,0.054983,0.032573,-0.018927,-0.006817,-0.019608,-0.003333,0.006689,0.006645,-0.009901,0,0.01,0.006601,0,0.009836,0.022727,-0.003175,-0.009554,0.022508,-0.003145,0.006309,-0.021944,0.012821,-0.015823,-0.028939,-0.009934,0.020067,0.045902,-0.012539,-0.003175,0.003185,0.012698,-0.003135,0.009434,-0.003115,-0.00625,0.003145,0.003135,-0.025,0.00641,0.012739,-0.003145,0.009464,-0.009375,0.009464,0,-0.0125,0,0.003165,-0.009464,0.006369,-0.028481,0.035831,-0.003145,0.009464,-0.00625,0.003145,-0.00627,-0.009464,-0.012739,0,-0.006452,0.016234,-0.003195,0.012821,0,0.003544,-0.003185,-0.00639,-0.022508,0.009868,0.006515,-0.003236,0,-0.012987,0.013158,-0.003247,-0.013029,0.0033,0,-0.016447,-0.006689,-0.003367,0.003378,0.013468,0.063123,0.0125,0.006173,-0.006135,-0.033951,-0.003195,-0.003205,0.022508,0.025157,0,-0.006135,-0.009259,-0.018692,0.009524,0.006289,-0.003125,0.015674,0.003086,0.003077,-0.009202,0,0.003096,-0.006173,-0.006211,0,-0.009375,-0.006309,-0.006349,0.00639,-0.003175,0,0.003185,-0.009524,0.009615,-0.003175,-0.009554,0.003215,-0.003205,0,0,0.003215,-0.009615,0.006472,-0.003215,0.000387,0.003257,-0.003247,0.006515,-0.003236,0.012987,0.022436,-0.003135,-0.006289,-0.003165,0.009524,0.044025,0.006024,0.005988,-0.005952,0,-0.017964,-0.003049,0,-0.006116,-0.009231,-0.018634,0.009494,-0.00627,-0.003155,0.009494,0.015674,0.021605,0,0.003021,-0.003012,0,-0.003021,-0.006061,-0.003049,-0.006116,-0.003077,0.003086,-0.006154,0.009288,-0.003067,-0.006154,0,0,-0.01548,0.012579,0.009317,-0.003077,-0.003086,0.006192,-0.006154,0,-0.012384,-0.00627,-0.006309,0.003175,-0.018987,0.016129,-0.009524,0.009615,0.003175,0.018987,-0.006211,0.025,-0.005732,-0.009288,0.00625,-0.006211,-0.009375,0.012618,-0.012461,0.009464,-0.00625,0.003145,-0.003135,0,0.003145,-0.003135,0,-0.006289,0.009494,-0.003135,0.009434,-0.006231,-0.015674,-0.009554,-0.025723,0.0033,-0.003289,-0.006601,0.006645,-0.013201,-0.006689,0.013468,-0.003322,-0.003333,0.006689,0.013289,-0.019672,0.006689,-0.006645,-0.003344,0.006711,0.036667,0.006431,0,-0.00639,0.009646,0.015924,0.003135,0.03125,0.012121,-0.005988,0.021084)

DEF <- c(0.004876,0.029923,-0.072242,-0.015235,-0.011603,0.015652,-0.021832,-0.015755,-0.008448,-0.038565,0.035914,-0.052679,0.005703,0.02741,-0.028059,0.004733,-0.00895,-0.035646,0.176934,-0.023869,-0.039468,-0.016079,0.00227,-0.015851,-0.02439,-0.021226,0.001928,-0.025493,0.027641,0.036023,0.02828,0.001803,-0.011251,0.015476,-0.035858,-0.003719,-0.0042,0.009372,-0.019499,0.023201,0.018047,0.005,0.037087,0.012647,-0.03273,0.036509,0.016323,0.040152,-0.001219,-0.002441,0.039967,0.023137,0.006899,0.007613,-0.007933,-0.026276,-0.003911,0.006677,0.023875,-0.014144,-0.002714,-0.031104,0.027689,0.003124,0.005839,-0.020898,0.030435,0.034906,0.036694,0.004648,-0.017438,-0.034408,-0.006752,0.010196,0.043738,-0.053725,0.008327,-0.035285,0.002724,-0.006209,-0.052714,-0.006595,0.025726,-0.024272,-0.011194,0.005451,-0.004587,0.002514,0.035102,-0.008478,0.052117,0.010836,0.009188,-0.016692,0.033179,-0.025766,0.013415,-0.00643,0.059764,0.002155,0.005376,-0.001069,-0.00571,0,0.005025,-0.001786,0.030411,0.003125,0.010038,-0.014051,-0.025721,-0.018195,0.005451,0.011926,-0.005714,0.002874,0.022206,0.018921,-0.016162,0.013632,-0.048276,-0.018841,0.038405,0.043385,0.000341,0.001363,-0.006805,0.030832,-0.000332,0.016955,0.019941,-0.019551,-0.033998,0.016582,0,0.008655,-0.00099,0.008259,-0.017038,0.007,-0.011917,0.01206,0.005958,0.009543,0.088983,-0.027237,0,-0.004615,0.007728,0.003681,-0.012836,0.017028,0,0.005784,-0.006659,-0.001828,0.000611,-0.012508,0.022552,-0.01148,0.008863,0.003332,0.003925,0.005714,-0.007775,-0.009946,-0.007915,-0.013194,-0.000622,0.015557,0.026961,-0.002387,-0.009569,-0.020229,0.00678,-0.015611,0.001866,0.007759,-0.020942,0.003146,0.017874,0.029883,0.014358,-0.009142,-0.004167,0.002926,0.003287,-0.010125,-0.000903,-0.003312,-0.010876,0.006109,-0.006679,-0.005807,0.006148,0.001528,-0.00244,0.017431,-0.011422,-0.00304,0.021653,-0.017612,-0.005773,-0.018643,0.000934,-0.009023,-0.000314,-0.009736,-0.001269,-0.005081,-0.019151,0.020827,0.000956,-0.018153,-0.013947,0.008224,-0.014356,-0.012248,0.009048,-0.003985,-0.012671,-0.008105,0.011236,-0.017508,0.019877,0.014113,-0.003976,-0.018629,0.002373,-0.002705,-0.014242,-0.02924,-0.00567,0.002851,0.000711,0.01598,0.019224,0.00823,-0.009524,0.015797,-0.025693,0.001388,-0.014553,0.014065,-0.003467,-0.008699,-0.004914,0.00388,-0.002811,-0.003524,-0.004597,-0.004263)

ugarchfit(spec = ugarchspec(mean.model = list(armaOrder = c(0, 0), include.mean = TRUE), variance.model = list(model = "eGARCH", garchOrder = c(1, 1))), data = ABC)
ugarchfit(spec = ugarchspec(mean.model = list(armaOrder = c(0, 0), include.mean = TRUE), variance.model = list(model = "eGARCH", garchOrder = c(1, 1))), data = DEF)
Run Code Online (Sandbox Code Playgroud)

r volatility convergence

5
推荐指数
1
解决办法
4790
查看次数

PostgreSQL插入或更新触发函数易失性类别

假设我的DB(postgresql-9.x)中有2个表

CREATE TABLE FOLDER (
    KEY BIGSERIAL PRIMARY KEY,
    PATH TEXT,
    NAME TEXT
);
CREATE TABLE FOLDERFILE (
    FILEID BIGINT,
    PATH TEXT,
    PATHKEY BIGINT
);
Run Code Online (Sandbox Code Playgroud)

我自动更新FOLDERFILE.PATHKEY来自FOLDER.KEY每当我插入或更新FOLDERFILE

CREATE OR REPLACE FUNCTION folderfile_fill_pathkey() RETURNS trigger AS $$
DECLARE
  pathkey bigint;
  changed boolean;
BEGIN
  IF tg_op = 'INSERT' THEN
     changed := TRUE;
    ELSE IF old.FILEID != new.FILEID THEN
       changed := TRUE;
    END IF;
  END IF;
  IF changed THEN
     SELECT INTO pathkey key FROM FOLDER WHERE PATH = …
Run Code Online (Sandbox Code Playgroud)

postgresql volatile immutability volatility

4
推荐指数
1
解决办法
1383
查看次数